主要就是利用清屏函数清除前面的输出棋盘,再利用无限循环函数不断输出棋盘和棋子,以清屏和无限输出棋盘达到光标移动和落子的视觉效果。
首先,我们定义了全局变量和一个二维数组用来记录棋盘有子和无子的数据,再多次使用了switch()语句进行菜单的选择与玩家一、二按键的获取达到该游戏的基础,在此我们又增加了背景更换的选择,for语句用来搭配DrawMap();函数画棋盘并将棋盘数据也就是二维数组的元素进行循环输入,在int judge(int x,int y);中以循环的形式判断输赢,if()语句更是大量运用在程序中game();函数中用来交换玩家落子并判断是否落子成功,在DrawMap();中用来判断何时输出黑子、白子和棋盘符号。while( );语句是实现玩家按键移动位置落子至关重要的一步,玩家每次按下功能键都是一次循环将DrawMap();函数放于循环体中搭配system("cls");使用,每次移动、落子都会再画出一个新的棋盘,从而实现光标移动和玩家落子的视觉效果。该程序还增加了一些有趣的步骤,不需要这些步骤的朋友可以看情况删除。
感谢大家的浏览。
代码:
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
//棋盘行列大小
#define hang 15
#define lie 29
//定义全局变量
int i,j,l; //l为落棋总数
int a[hang][lie],b[hang][lie]; //棋盘数据
int cursorX,cursorY; //光标位置
int Gamer; //当前玩家;1黑子,2白子
//函数
void menu(); //菜单函数
void Init(); //初始棋盘函数
void DrawMap(); //画棋盘
void Rule_set(); //游戏规则
void game(); //开始游戏
int Put(); //落子函数
int judge1(int ,int ); //判断玩家一获得胜利函数
int judge2(int ,int ); //判断玩家二获得胜利函数
void EndGame(); //游戏结束
//主函数
int main()
{
SetConsoleTitle("五子棋游戏"); //窗口标题
system("color E0"); //背景颜色 淡黄
int a,up=1;
while(up)
{
system("cls"); //使返回菜单栏重新选择功能时清除先前屏幕的内容,只显示菜单栏
printf("\n\n");
printf(" 欢迎使用五子棋游戏!\n");
printf("\n\n");
menu();
gotoxy(26,13);
printf("*请按相应数字选择功能:");
scanf("%d",&a);
getchar();
switch(a) //通过多分支选择结构执行调用相应函数,从而实现相应功能
{
case 1:game();break;
case 2:game();break;
case 3:Rule_set();break;
case 0:up=0;break;
}
}
system("cls");
printf("\n已退出五子棋游戏!\n欢迎下次使用!\n");
system("pause");
return 0;
}
//菜单函数
void menu()
{
printf(" ********************\n");
printf(" * 五子棋游戏 *\n");
printf(" * [1]开始新游戏 *\n");
printf(" * [2]继续旧游戏 *\n");
printf(" * [3]规则与设置 *\n");
printf(" * [0]退出此游戏 *\n");
printf(" ********************\n");
}
//初始化函数
void Init()
{
int l=0;
int a[hang][lie]={0}; //棋盘数据赋值为0
cursorX=h