用C语言来实现五子棋小游戏

目录

一、五子棋的准备工作

二、五子棋的具体实现

1.棋盘

2.人机对战

2.1 玩家下棋

2.2 电脑下棋

2.3 判断输赢

三、总结


一、五子棋的准备工作

我们在写一个项目的时候,首先第一步就是应该规划一个项目应该有哪些文件,然而五子棋的代码逻辑比较简单,这里我就分了三个文件来写:

  •         game.h(这个文件用来存储头文件和函数的声明),
  •         game.c(这个文件用来存储具体的实现代码),
  •         test.c(这个文件用来测试我们的代码)

第二步就是规划一个项目应该有哪些功能或者说有哪些机制,比如说五子棋,他可能就有人机对战,玩家下一步,电脑下一步,判断棋盘有没有一片区域是连成一块的,这些都是我们要考虑到的,并且把他们一个个封装成函数,整个逻辑就可以运行起来,下面是具体要实现的一些功能的函数并且还有相应的头文件,我都放到game.h里面了

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//棋盘的长度和宽度
#define ROW 5
#define COL 5


//初始化
void board_init(char arr[ROW][COL], int row, int col);

//打印
void board_display(char arr[ROW][COL], int row, int col);

//玩家下棋
void player_move(char arr[ROW][COL], int row, int col);

//电脑下棋
computer_move(char arr[ROW][COL], int row, int col);

//判断是否赢了
char is_win(char arr[ROW][COL], int row, int col);

二、五子棋的具体实现

1.棋盘

下五子棋,第一步就是要有一个棋盘,我们常见可能有3*3的棋盘或5*5的棋盘,用来下井字棋最合适,我本来以为我写的棋盘可能会和下面这些图一样。

 但是没想到自己写的棋盘长这样,其实也还能看。

 下面就是具体实现过程: 

        我们会发现棋盘的每一个格子是由上下两部分组成的,首先是上面部分是由两个空格加上中间的数据区域加上右边的竖杠(|),然后是下面部分是由三个减号(-)加上右边的竖杠(|),但是我们会发现我们数据区域好像一开始也是空格,那是因为在实现打印棋盘的函数之前,我先给所有区域都初始化为空格,为什么要初始化空格呢?首先初始化空格可以帮助我们占一个位置,如果你不初始化,很可能就是随机值,到时候打印出来就会很奇怪,那为什么一定要初始化空格呢?首先空格可以帮助我们占一个位置,就是把右边空格顶过去,如果你初始化为0,就不会帮你占位置,右边的空格就和左边的空格挨在一起,就会很难看,下面是初始化的代码:

//初始化
void board_init(char arr[ROW][COL], int row, int col) {
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++) {
		for (j = 0; j < col; j++) {
			arr[i][j] = ' ';
		}
	}
}

这样我们很快就分析出,棋盘第一行是数据区域,第二行是分隔线,然后以此类推,每一行都是这样的,那我们就想先用for循环遍历第一行把数据的那一部分先打印出来,然后用第二个for循环把分割线也打印出来&

一个很好的五子棋c语言源程序代码,最重要的是能运行正确!!! #include #include #include #include #include #define CROSSRU 0xbf /*右上角点*/ #define CROSSLU 0xda /*左上角点*/ #define CROSSLD 0xc0 /*左下角点*/ #define CROSSRD 0xd9 /*右下角点*/ #define CROSSL 0xc3 /*左边*/ #define CROSSR 0xb4 /*右边*/ #define CROSSU 0xc2 /*上边*/ #define CROSSD 0xc1 /*下边*/ #define CROSS 0xc5 /*十字交叉点*/ /*定义棋盘左上角点在屏幕上的位置*/ #define MAPXOFT 5 #define MAPYOFT 2 /*定义1号玩家的操作键键码*/ #define PLAY1UP 0x1157/*上移--'W'*/ #define PLAY1DOWN 0x1f53/*下移--'S'*/ #define PLAY1LEFT 0x1e41/*左移--'A'*/ #define PLAY1RIGHT 0x2044/*右移--'D'*/ #define PLAY1DO 0x3920/*落子--空格键*/ /*定义2号玩家的操作键键码*/ #define PLAY2UP 0x4800/*上移--方向键up*/ #define PLAY2DOWN 0x5000/*下移--方向键down*/ #define PLAY2LEFT 0x4b00/*左移--方向键left*/ #define PLAY2RIGHT 0x4d00/*右移--方向键right*/ #define PLAY2DO 0x1c0d/*落子--回车键Enter*/ /*若想在游戏中途退出, 可按 Esc 键*/ #define ESCAPE 0x011b /*定义棋盘上交叉点的状态, 即该点有无棋子 */ /*若有棋子, 还应能指出是哪个玩家的棋子 */ #define CHESSNULL 0 /*没有棋子*/ #define CHESS1 'O'/*一号玩家的棋子*/ #define CHESS2 'X'/*二号玩家的棋子*/ /*定义按键类别*/ #define KEYEXIT 0/*退出键*/ #define KEYFALLCHESS 1/*落子键*/ #define KEYMOVECURSOR 2/*光标移动键*/ #define KEYINVALID 3/*无效键*/ 下载可看到完整的...
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值