数据模型
- 棋盘:15*15 二维数组
- 棋子:行坐标,列坐标
- 角色:# @
业务逻辑
1、初始化二维数组
2、显示棋盘
3、落子
4、判断是否有5子形成,有则游戏结束,没有则继续
5、切换角色,然后继续2
代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <getch.h>
//定义棋盘
char board[15][15];
//棋子坐标
char key_x=7,key_y=7;
//角色
char role='@';
void init_board(void)
{
for(int i=0; i<15; i++)
{
for(int j=0; j<15; j++)
{
board[i][j]='*';
}
printf("\n");
}
//全部初始化为“*”
}
void show_board(void)
{
//清屏
system("clear");
//显示棋盘数组
for(int i=0; i<15; i++)
{
for(int j=0; j<15; j++)
{
printf("%c",board[i][j]);
}
printf("\n");
}
}
void get_key(void)
{
while(true)
{
printf("\33[%hhd;%hhdH",key_x+1,key_y+1);
switch(getch())
{
case 183: key_x>0 && key_x--; break;//上
case 184: key_x<14 && key_x++; break;//下
case 185: key_y<14 && key_y++; break;//右
case 186: key_y>0 && key_y--; break;//左
case 10:
if(board[key_x][key_y] == '*')
{
board[key_x][key_y]=role;
return;
}
}
//检查坐标范围是否合法
//检查是否有五子存在
//把角色赋值给board[key_x][key_y]
}
}
count_key(int x_go,int y_go)
{
int count=0;
for(int x=key_x+x_go,y=key_y+y_go; x>=0 && y>=0 && x<15 && y<15; x+=x_go,y+=y_go)
{
if(board[x][y] == board[key_x][key_y])
{
count++;
}
else
{
break;
}
}
return count;
}
bool check_key(void)
{
if(count_key(0,-1)+count_key(0,1) >=4)
return true;
if(count_key(-1,0)+count_key(1,0) >=4)
return true;
if(count_key(-1,-1)+count_key(1,1) >=4)
return true;
if(count_key(-1,1)+count_key(1,-1) >=4)
return true;
return false;
}
int main()
{
init_board();
for(int i=0; i<225; i++)
{
show_board();
//显示棋盘
get_key();
//落子
if(check_key())
{
show_board();
printf("恭喜%c获得胜利!\n",role);
return 0;
}
//检查是否有五子形成
role=role == '@'?'#':'@';
//切换角色
}
}