二维数组实战项目--------《三子棋》(上)

简介: 今天给大家分享一个小游戏,就会我们通常玩的五子棋(正文中的代码块为示范代码,游戏源码小编放在文章末尾!!!)

一.开发思路以及游戏框架设计:


1.游戏的菜单打印

2.游戏棋盘的打印

3.开始游戏

4.判断输赢


二. 开发及代码优化细节


1)打印菜单


VS上创建好项目后,我们需要添加2个源文件和1个头文件

test.c-------------------------用于测试三子棋游戏

game.c----------------------用于游戏函数的实现

game.h----------------------用于游戏函数的声明

epo7cg4wsoekm_98be089fa7404ad7ac90a63bd5f57865.png

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>voidmenu(){
printf("------------------------\n");
printf("------------------------\n");
printf("---------1.paly---------\n");
printf("---------0.exit---------\n");
printf("------------------------\n");
printf("------------------------\n");
}
voidgame() {
}
intmain() {
intinput=0;
do    {
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
        {
case1:
game();
break;
case0:
printf("退出游戏:\n");
break;
default:
printf("选择错误,重新选择:\n");
break;
        }
    } while (input);
return0;
}

注:此代码适用于简单的小游戏开发(菜单打印),每个游戏的实现逻辑都不一样,上面代码的game函数用于游戏实现逻辑的封装,代码实现如下:

epo7cg4wsoekm_97b860c5ab38443795f13424f2b9bb52.png



2)游戏棋盘的打印及代码优化


为了帮助大家理解,这是运行以后的界面,由.exe文件执行结果界面可知,棋盘的实现是一个3x3的网格状,落子的位置由坐标去实现,玩家下棋用( * )代替,电脑下棋用(#)代替,所以我们需要创建一个字符型二维数组来存放玩家和电脑输入的字符,接下来就是棋盘打印的实现了:

epo7cg4wsoekm_dd3bb916d3454defa02696ea006e46ca.png

为了使代码的效率更高,我们选择用宏定义来控制数组的行和列:

#define COL 3

#define ROW 3

棋盘打印代码如下

voidgame() {
charboard[ROW][COL] = { 0 }; 
//数组初始化为0display_board(board, ROW, COL);
//创建打印棋盘的函数,分别用数组名,行数,列数作为三个参数去调用}
voiddisplay_board(charboard[ROW][COL], introw, intcol) {
inti=0;
for (i=0; i<row; i++) {
//存放数据printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
//打印---|---|---if(i<row-1)
printf("---|---|---\n");
    }
}

运行:

epo7cg4wsoekm_df8186553bac4283ba5e96ed839d0eab.png

Tips:打印的棋盘与预期不太符合,原因是我们给数组初始化的时候设置为0,所以我们需要给此代码进行优化



优化:写一个初始化函数,确保二维数组里存放的是空格字符,代码如下:

voidinit_board(charboard[ROW][COL], introw, intcol) {
inti=0;
intj=0;
for (i=0; i<row; i++) {
for (j=0; j<col; j++) {
board[i][j] =' ';
        }
    }
}

epo7cg4wsoekm_4c35a081653d4554a2ad4ae75307714f.png

二次优化代码(动态控制棋盘):

voiddisplay_board(charboard[ROW][COL], introw, intcol) {
inti=0;
for (i=0; i<row; i++) {
//存放数据//printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);//打印---|---|---intj=0;
for (j=0; j<col; j++) {
printf(" %c ", board[i][j]);
if (j<col-1)
printf("|");
        }
printf("\n");
if(i<row-1)
for (j=0; j<col; j++) {
printf("---");
if (j<col-1)
printf("|");
        }
printf("\n");
    }
}

到这里,棋盘的打印准备工作就已经完成了


目录
相关文章
|
6月前
|
C语言
C语言之详解数组【附三子棋和扫雷游戏实战】(二)
C语言之详解数组【附三子棋和扫雷游戏实战】(二)
三子棋小游戏思路及代码实现的详解
三子棋小游戏思路及代码实现的详解
62 0
|
5月前
小游戏:三子棋的代码实现
小游戏:三子棋的代码实现
33 3
|
6月前
c语言学完数组就可以完成的小游戏--三子棋
c语言学完数组就可以完成的小游戏--三子棋
三子棋的创建
三子棋的创建
82 0
|
6月前
|
存储 编译器 C语言
C语言之详解数组【附三子棋和扫雷游戏实战】(一)
C语言之详解数组【附三子棋和扫雷游戏实战】(一)
|
6月前
|
算法 C语言
三子棋小游戏(可改棋盘大小)
三子棋小游戏(可改棋盘大小)
76 0
|
11月前
|
C语言
【三子棋】用C语言简单实现三子棋
【三子棋】用C语言简单实现三子棋
|
C语言
C语言三子棋小游戏--数组的应用
三子棋,顾名思义,就是三个子连在一起就可以胜出。在本节我们要介绍的三子棋模式是这样子的:在键盘输入坐标(表示落子),和电脑对下(当前电脑设计为随机下)
52 0
|
C语言
从零到一快速学会三子棋
从零到一快速学会三子棋
67 1