让我们一起玩玩这个有趣的三子棋游戏吧!
1.选择界面
2.当我们要玩游戏的时候,选择“1”,退出去的时候选择“0”
3.当我们当我们三个一样的时候就会胜利
电脑的走法是随机的,所以我们获取胜利的可能性会很打哦。
4.接下来就向大家展示一下我们的游戏代码
首先我们看一下游戏代码的头文件
game.h
#ifndef __GAME_H__
#define __GAME_H__
#define ROW 3
#define COL 3
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void DisplayBoard(char board[ROW][COL], int row, int col);//展示棋盘
void ComputerMove(char board[ROW][COL], int row, int col);//电脑走棋
void PlayerMove(char board[ROW][COL], int row, int col);//玩家走棋
int IsFull(char board[ROW][COL], int row, int col);//棋盘是否满(满1,未满0)
char IsWin(char board[ROW][COL], int row, int col);//判断游戏结果(//电脑赢 'O' //玩家赢 'X' //平局 'Q' //游戏继续 'P’
#endif //__GAME_H__
game.c
#include"game.h"
void DisplayBoard(char board[ROW][COL], int row, int col)//展示棋盘
{
int i=0;
int j=0;
for (i = 0; i < row; i++)
{
for(j=0;j<col;j++ )
{
printf("%c",board[i][j]);
if( j < col-1)
{
printf(" | ");
}
}
printf("\n");
if(i < row-1)
{
printf("―――――");
}
printf("\n");
}
printf("\n");
}
void ComputerMove(char board[ROW][COL], int row, int col)//电脑走棋
{
printf("电脑走:\n");
while(1)
{
int i=rand()%row;
int j=rand()%col;
if(board[i][j]==' ')
{
board[i][j]='0';
break;
}
}
}
void PlayerMove(char board[ROW][COL], int row, int col)//玩家走棋
{
printf("玩家走:\n");
while(1)
{
int i = 0;
int j = 0;
printf("请输入要走的坐标:");
scanf("%d%d",&i,&j);
if(i<1||i>row||j<1||j>col)
{
printf("输入错误,请重新输入!");
}
else
{
if(board[i-1][j-1]=='0')
{
printf("您输入的坐标已被占用,请重新输入:");
}
else
{
board[i-1][j-1]='*';
break;
}
}
}
}
int IsFull(char board[ROW][COL], int row, int col)//棋盘是否满(满1,未满0)
{
int i =0;
int j =0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(board[i][j]==' ')
return 0;
}
}
return 1;
}
char IsWin(char board[ROW][COL], int row, int col)//判断游戏结果(//电脑赢 'O' //玩家赢 '*' //平局 'Q' //游戏继续 'P’)
{
int i=0;
int j=0;
for(i=0;i<row;i++)
{
if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][0]!=' ')
return board[i][0];
}
for(i=0;i<col;i++)
{
if(board[0][j]==board[1][j]&&board[1][j]==board[2][j]&&board[0][j]!=' ')
return board[0][j];
}
if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[0][0]!=' ')
{
return board[0][0];
}
if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[0][2]!=' ')
{
return board[0][2];
}
if (IsFull(board, ROW, COL) == 1)
{
return 'Q';
}
else
{
return 'p';
}
}
test.c
#include"game.h"
void menu()
{
printf("*****************************\n");
printf("********** 1.play ********\n");
printf("********** 0.exit ********\n");
printf("*****************************\n");
}
void game()
{
int ret =0;
char board[ROW][COL]={0};
memset(&board[0][0], ' ', ROW*COL * sizeof(board[0][0]));//初始化棋盘
do
{
ComputerMove(board,ROW, COL);//电脑移动
DisplayBoard(board,ROW,COL);//展示棋盘
ret=IsWin(board,ROW,COL);
if(ret!='p')
{
if(ret=='0')
printf("电脑赢!\n");
if(ret=='*')
printf("玩家赢!\n");
if(ret=='Q')
printf("平局!\n");
break;
}
PlayerMove(board, ROW,COL);//玩家移动
DisplayBoard(board,ROW,COL);//展示棋盘
ret=IsWin(board,ROW,COL);
if(ret!='p')
{
if(ret=='0')
printf("电脑赢!\n");
if(ret=='*')
printf("玩家赢!\n");
if(ret=='Q')
printf("平局!\n");
break;
}
}while(1);
}
int main()
{
int input=0;
do
{
srand((unsigned int)time(NULL));
menu();
printf("请选择: ");
scanf("%d",&input);
switch(input)
{
case 0:
printf("退出游戏\n");
break;
case 1:
game();
break;
default:
printf("输入错误,请重新输入:");
break;
}
}
while(input);
return 0;
}
`
以上就是代码的全部部分,有很多可以改进的地方,希望大家可以多多给点建议。