栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

经典小游戏(一)C实现——三子棋

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

经典小游戏(一)C实现——三子棋

大家好!今天我来叫大家怎么简单的用纯c语言实现三子棋小游戏。

目录

预览

实现的效果图VS现实图

设计原理

函数声明

main()主函数代码

test函数代码块

mine实现菜单函数代码块

 game函数代码块

游戏具体实现函数

完整源代码


预览

实现的效果图VS现实图

设计原理
  1. 打印菜单
    void menu()
  2. 设置棋盘格式
    char board[ROW][COL]={0};
  3. 初始化棋盘
    InitBoard(board,ROW,COL);
  4. 打印棋盘

    DisplayBoard(board,ROW,COL);
  5. 下棋

    1. 玩家下棋

      PlayerMove(board,ROW,COL);
    2. 电脑下棋

      ComputerMove(board,ROW,COL);
  6. 判断输赢

    ret=IsWin(board,ROW,COL);

函数声明

作用:声明函数

#define ROW 3    //行
#define COL 3    //列

#include
#include
#include

//声明
void InitBoard(char board[ROW][COL],int row,int col);
void DisplayBoard(char board[ROW][COL],int row,int col);
void PlayerMove(char board[ROW][COL],int row,int col);
void ComputerMove(char board[ROW][COL],int row,int col);


//告诉我们四种状态
//玩家赢  '*'
//电脑赢  '#'
//平局  'Q'
//继续  'C'
char IsWin(char board[ROW][COL],int row,int col);

main()主函数代码

作用:调用test函数

int main()
{
	test();

	return 0;
}

test函数代码块

作用:检查菜单栏是否进行下一步操作

void test()
{
	int input = 0;
     
    //循环游戏的开始与结束,至少执行一次
	do
	{
	
		menu();//调用menu函数,打印菜单栏信息
        game();
		printf("请选择:>");
		scanf("%d",&input);

        //根据用户所输入的数字触发下面的开关		
		switch(input)
		{
		
		case 1:
			printf("三子棋n");//这里先测试是否会执行成功
			break;
		case 0:
			printf("退出游戏n");
			break;
		default :
			printf("选择错误,请重新选择!n");
			break;
		}
	}
	while(input);//直到输入的结果为假,循环才会结束
}

mine实现菜单函数代码块
void menu()
{

	printf("******************************n");
	printf("*****  1.paly     0.exit  ****n");
	printf("******************************n");

}

 展示效果:

 game函数代码块
void game()
{

	char ret = 0;
	//数组-存放走出的棋盘信息
	char board[ROW][COL]={0};
	//初始化棋盘
	InitBoard(board,ROW,COL);
	//打印棋盘
	DisplayBoard(board,ROW,COL);
	//下棋
	while(1)
	{
	
		//玩家下棋
		PlayerMove(board,ROW,COL);
		DisplayBoard(board,ROW,COL);
		//判断玩家是否赢
		ret=IsWin(board,ROW,COL);
		if(ret!='C')
		{
		
			break;
		}
		//电脑下棋
		ComputerMove(board,ROW,COL);
		DisplayBoard(board,ROW,COL);
		//判断电脑是否赢
		ret=IsWin(board,ROW,COL);
		if(ret!='C')
		{
		
			break;
		}
	}
		if(ret=='*')
		{
		
			printf("玩家赢n");
		}
		else if(ret=='#')
		{
		
			printf("电脑赢n");
		}
		else
			printf("平局n");

}

游戏具体实现函数
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"

void InitBoard(char board[ROW][COL],int row,int col)
{
	int i = 0;
	int j = 0;
	for(i=0; in");
	while(1)
	{
		printf("请输入要下的坐标:>");
		scanf("%d%d",&x,&y);
		//判断x,y坐标的合法性
		if(x>=1 && x<=row && y>=1 && y<=col)
		{
	
			if(board[x-1][y-1]==' ')
			{
		
				board[x-1][y-1]='*';
				break;
			}
			else
			{
		
				printf("该坐标被占用n");
			}

		}
		else
		printf("坐标非法,请重新输!n");
	}
}
void ComputerMove(char board[ROW][COL],int row,int col)
{
	int x = 0;
	int y = 0;
	printf("电脑走:>n");
	

	while(1)
	{
	
		x = rand()%row;
		y = rand()%col;
		if(board[x][y]==' ')
		{
	
		board[x][y]='#';
		break;
		}
	}

}
//返回1,表示棋盘满了
//返回,表示棋盘没满
int IsFull(char board[ROW][COL],int row,int col)
{

	int i = 0;
	int j = 0;
	for(i = 0;i 

完整源代码
#include
#include"game.h"
#define ROW 3
#define COL 3
#include
#include
//声明
void InitBoard(char board[ROW][COL],int row,int col);
void DisplayBoard(char board[ROW][COL],int row,int col);
void PlayerMove(char board[ROW][COL],int row,int col);
void ComputerMove(char board[ROW][COL],int row,int col);


//告诉我们四种状态
//玩家赢  '*'
//电脑赢  '#'
//平局  'Q'
//继续  'C'
char IsWin(char board[ROW][COL],int row,int col);

void menu()
{

	printf("******************************n");
	printf("*****  1.paly     0.exit  ****n");
	printf("******************************n");

}
void game()
{

	char ret = 0;
	//数组-存放走出的棋盘信息
	char board[ROW][COL]={0};
	//初始化棋盘
	InitBoard(board,ROW,COL);
	//打印棋盘
	DisplayBoard(board,ROW,COL);
	//下棋
	while(1)
	{
	
		//玩家下棋
		PlayerMove(board,ROW,COL);
		DisplayBoard(board,ROW,COL);
		//判断玩家是否赢
		ret=IsWin(board,ROW,COL);
		if(ret!='C')
		{
		
			break;
		}
		//电脑下棋
		ComputerMove(board,ROW,COL);
		DisplayBoard(board,ROW,COL);
		//判断电脑是否赢
		ret=IsWin(board,ROW,COL);
		if(ret!='C')
		{
		
			break;
		}
	}
		if(ret=='*')
		{
		
			printf("玩家赢n");
		}
		else if(ret=='#')
		{
		
			printf("电脑赢n");
		}
		else
			printf("平局n");

}


void test()
{
	int input = 0;
	//srand((unsigned int)time(NULL));
	do
	{
	
		menu();
		printf("请选择:>");
		scanf("%d",&input);
		
		switch(input)
		{
		
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏n");
			break;
		default :
			printf("选择错误,请重新选择!n");
			break;
		}
	}
	while(input);
}
int main()
{
	test();

	return 0;
}

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"

void InitBoard(char board[ROW][COL],int row,int col)
{
	int i = 0;
	int j = 0;
	for(i=0; in");
	while(1)
	{
		printf("请输入要下的坐标:>");
		scanf("%d%d",&x,&y);
		//判断x,y坐标的合法性
		if(x>=1 && x<=row && y>=1 && y<=col)
		{
	
			if(board[x-1][y-1]==' ')
			{
		
				board[x-1][y-1]='*';
				break;
			}
			else
			{
		
				printf("该坐标被占用n");
			}

		}
		else
		printf("坐标非法,请重新输!n");
	}
}
void ComputerMove(char board[ROW][COL],int row,int col)
{
	int x = 0;
	int y = 0;
	printf("电脑走:>n");
	

	while(1)
	{
	
		x = rand()%row;
		y = rand()%col;
		if(board[x][y]==' ')
		{
	
		board[x][y]='#';
		break;
		}
	}

}
//返回1,表示棋盘满了
//返回,表示棋盘没满
int IsFull(char board[ROW][COL],int row,int col)
{

	int i = 0;
	int j = 0;
	for(i = 0;i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号