简单的三子棋小游戏

学习完数组以后思考用所学知识实现一个小游戏———三子棋小游戏。

三子棋小游戏的游戏规则是:当玩家 一行或者一列或者对角线上三个元素一样,可以连成一条直线时,玩家获胜。

思考如何实现三子棋小游戏:棋盘可以用三行三列的数组实现。由电脑生成两个0~2之间的随机数,占用一个位置。玩家可以输入想要落子的位置。每次电脑和玩家落子后判断 是否有一方获胜,若没有,则判断棋盘是否还有空位。有空位的话游戏继续,没有空位则是平局。设置循环实现玩家每次玩完后选择是否再来一局。

代码如下:

建立一个头文件:

#ifndef GAME_H
#define GAME_H
#include<stdio.h>
#include<windows.h>
#include<time.h>
#pragma warning(disable:4996)

#define ROW 3 //定义三行
#define COL 3 //定义三列
#define p_color ‘X’ //定义玩家落子为 X
#define c_color ‘O’ //定义电脑落子为 O
#define null ’ ’ // 定义null为 (一个空格,实现初始化时使用)

void InitBoard(char board[][COL], int row, int col);
void ShowBoard(char board[][COL], int row, int col);
void ComputerMove(char board[][COL], int row, int col);
char Judge(char board[][COL], int row, int col);

void Game();
#endif

建立 mian.c
#include"game.h"

void Menu()
{
printf("#################################\n");
printf("##############三子棋##############\n");
printf("########## 1.play 2.exit#########\n");
printf("#################################\n");
printf(“请选择:\n”);
}
int main()
{
int quit=0;
while (!quit)
{ Menu();
int select=0;
scanf("%d",&select);
switch(select)
{
case 1: Game();break;
case 2: quit=1;break;
default:printf(“你的输入有误,1、玩游戏 2、退出, 请重新输入\n”);break;
}
}
printf(“bye bye”);
system(“pause”);
}

扫描二维码关注公众号,回复: 8948416 查看本文章

建立game.c

#include"game.h"

void InitBoard(char board[][COL], int row, int col) // 初始化数组
{int i=0;
for(;i<ROW;i++){
int j=0;
for(;j<COL;j++)
{ board[i][j]=null;
}}
}

void ShowBoard(char board[][COL], int row, int col) //显示棋盘
{
printf(" 1 | 2 | 3\n");
printf(“\n");
int i=1;
for(;i<=ROW;i++){
printf("%d |",i);
int j = 0;
for (; j < col; j++){
printf(" %c |", board[i - 1][j]);
}
printf("\n");
printf("
\n”);
}
}

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]=c_color;break;}
}
}

char Judge(char board[][COL], int row, int col) //判断
{ int i=0;
int j=0;
for (;i<ROW;i++){
if (board[i][0]!=null&&board[i][0]==board[i][1]&&board[i][1]==board[i][2])
{return board[i][0];}}
for(;j<COL;j++)
{if (board[0][j]!=null&&board[0][j]==board[1][j]&&board[1][j]==board[2][j])
{return board[0][j];}}
if(board[1][1]!=null&&board[0][0]==board[1][1]&&board[1][1]==board[2][2])
{return board[1][1];}
if(board[1][1]!=null&&board[0][2]==board[1][1]&&board[1][1]==board[2][0])
{return board[1][1];}
for (i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
if (board[i][j]==null)
{return ‘N’;}
}
}
return ‘F’;
}

void Game()
{
srand((unsigned long)time(NULL)); //生成随机数
char board[ROW][COL];
InitBoard(board,ROW,COL);
char result=‘a’;
do{

ShowBoard(board,ROW,COL);
int x=0; int y=0;
printf(“请输入您要落子的位置\n”);
scanf("%d %d",&x,&y);
if(x<1||x>3||y<1||y>3) //判断玩家输入位置是否有误
{printf(“你输错了,请重新输入\n”);
continue;}
if(board[x-1][y-1]!=null){ // 判断玩家输入位置是否被占用
printf(“该位置已经被占用,请重新输入:\n”);
continue;}
board[x-1][y-1]=p_color; // 玩家输入位置合法,位置占用。
result = Judge(board, ROW, COL); //判断当前输赢情况
if (result!=‘N’) //N 表示 继续 ; F 表示 结束
{break;}
ComputerMove(board, ROW, COL); //电脑落子
result = Judge(board, ROW, COL); //判断
if (result != ‘N’)
{ break;}
}while(1);
if (result ==p_color){ printf(“恭喜你,你赢了!\n”); }
else if (result ==c_color){ printf(“不好意思,你输了\n”); }
else{ printf(“平局\n”); }
printf(“你玩的还不错,再来一把吗?\n”);
}

发布了9 篇原创文章 · 获赞 1 · 访问量 181

猜你喜欢

转载自blog.csdn.net/LQyh_/article/details/102986481
今日推荐