基本的思路
我们要编写一个简易的c语言的时候,要搞清楚它的运行机制,所用的方法,在脑海里要有一个简明的思路,运行起来是什么样子的。我们要使这个代码成功运行起来需要的是电脑下棋的步骤。因为这是一个简易的三子棋,所以我们采用九宫格,电脑随机下棋子的方法实现。具体的构思如下图:
需要做到的一些事情:
1.所有的游戏数据都应该保存起来。要让电脑知道你在哪里下了棋子。
2.下棋的方式采用坐标
3.建立一个二维数组char board[3][3];-----空格
4.建立一个显示界面ShowBoard();
5.用户输入坐标PLayerMove(),对输入的坐标进行合法性的判断,如char board[4][4]就不合法,同时需要判断该位置是否有棋子。
6.每走一步,判断int result= IsEnd()是否三子连珠(四种情况,赢,输,平局,继续)
if(result !=继续){
break;}
ComputerMove();
result =IsEnd();
具体的编写
//头文件 game.h
#ifndef _GAME_H_
#define _GAME_H_
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#define ROW 3
#define COl 3
#define WHITE 'x' //用户
#define BLACK '0' //电脑
#define INIT ' '
#define NEXT 'D'
#define DRAW 'N'
#pragma warning(disable:4996);
extern void Game()
#endif
//main.c
#include "game.h"
void Menu()
{
printf("+------------------------------+\n");
printf("| 1.Play 0.Exit |\n");
printf("+------------------------------+\n");
}
int main()
{
int select =0;
int quit =0;
while(!quit)
{
Menu();
printf("please Select#");
scanf("%d",&select);
switch(select)
{
case 1:
Game();
break;
case 0:
quit = 1;
break;
default:
printf("Enter Error\n");
break;
}
}
printf("byebye\n");
system("pause");
return 0;
}
//game.c
#include "game.h"
static void InitBoard(char board[][COL],int row,int col)
{
int x=0;
int y=0;
for (int =0;i<row;i++)
{
for (int j =0;j<col;j++)
{
board[i][j]=INIT ;
}
}
}
static void ShowBoard(char board[][COL],int row,int col)
{
sys("cls")
printf(" ")
for(int i=0;i<col;i++)
{
printf("%d",i);
}
printf("\n--------------\n");
for(int i=0;i<row;i++)
{
printf("%2d", i+1);
for(int j=0;j<col;j++)
{
printf("| %c ,board[i][j]");
}
printf("\n--------------\n");
}
}
static void PlayerMove(char board[][COL],int row,int col)
{
while(1)
{
printf("please Enter Postion<x,y>#" );
sacnf("%d %d",&x,&y);
if(x<1||y<1||x>3||y>3)
{
printf("Enter Postion Error\n");
continue;
}
if(board[x-1][y-1]!=INIT)
{
printf("Enter Postion Is Not Empty\n");
continue;
}
board[x-1][y-1]= WHITE;
break;
}
}
static void ComputerMove(char board[][COL],int row,int col)
{
while(1)
{
int x=rand()%row;
int y=rand()%col;
if(board[x][y]==NULL)
{
board[x][y]=BLACK;
break;
}
}
}
static char IsEnd(char board[][COL],int row,int col)
{
for(int i=0;i<row;i++)
{
if(board[i][0]==board[i][1] &&\
board[i][1]==board[i][2] &&\
board[i][0]!=INIT)
{
return board[i][0];
}
}
for(int i=0;j<COL;j++)
{
if(board[0][j]==board[1][j] &&\
board[1][j]==board[2][j] &&\
board[0][j]!=INIT)
{
return board[0][j];
}
}
if(board[0][0]==board[1][1] &&\
board[1][1]==board[2][2] &&\
board[1][1]!=INIT)
{
return board[1][1];
}
if(board[0][2]==board[1][1] &&\
board[1][1]==board[2][0] &&\
board[1][1]!=INIT)
{
return board[1][1];
}
for (int =0;i<row;i++)
{
for (int j =0;j<col;j++)
{
if(board[i][j]!=INIT )
{
return NEXT;
}
}
}
return DRAW;
}
void Game()
{
char board[ROW][COL]
InitBoard(board,ROW,COL);
srand((unsigned long)time(NULL));
char rersult =0;
while (1)
{
ShowBoard(board,ROW,COL);
PlayerMove(board,ROW,COL);
result=IsEnd(board,ROW,COL);
if(resule != NEXT)
{
break;
}
ShowBoard(board,ROW,COL);
ComputerMove(board,ROW,COL);
result=IsEnd(board,ROW,COL);
if(resule != NEXT)
{
break;
}
}
ShowBoard(board,ROW,COL);
switch(result)
{
case WHITE:
printf("You win\n");
break;
case BLACK:
printf("You lose\n");
break;
default:
printf("BUG\n");
break;
}
}
|