您的位置:首页 > 编程语言 > C语言/C++

C语言_三子棋小游戏

2018-04-06 16:52 363 查看

三子棋(c语言版)

游戏是在3*3的棋盘上输入坐标,其主要功能有:

(1),玩家走

(2),电脑走

(3),打印棋盘

(4),判断输赢

(5),判断是不是平局

头文件一个,game.h

源文件有2个,分别是test.c 和 game.c

代码如下:

game.h(头文件)

//三子棋游戏
# ifndef __GAME_H__
#define __GAME_H__

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

# define H 3
# define L 3

void display_board (char arr[H][L], int h, int l);//打印棋盘

void player_move(char arr[H][L], int h, int l);//玩家走

void computer_move(char arr[H][L], int h, int l);//电脑走

char is_win (char arr[H][L], int h, int l);//判断输赢

#endif


test.c(主要是测试游戏功能)

#include <stdio.h>
#include "game.h"

void menu ()
{
printf ("*********************************\n");
printf ("******      五子棋游戏    *******\n");
printf ("********   1、开始游戏   ********\n");
printf ("********   0、结束游戏   ********\n");
printf ("*********************************\n");
}
void empty (char arr[H][L], int h, int l)
{
int i = 0, j = 0;
for (i=0; i<H; i++)
{
for (j=0; j<L; j++)
{
arr[i][j] = ' ';
}
}
}

void game ()
{

int i = 0, j = 0;
char ret = '0';
char arr[H][L] = {'0'};

empty (arr, H, L);
display_board(arr, H, L);

while (1)
{
player_move(arr,H,L);//玩家走
display_board(arr, H, L);//打印棋盘
ret = is_win(arr, H, L);//判断输赢

if (ret == 'X')
{
printf ("玩家赢\n");
break;
}
else if (ret == 'P')
{
printf ("平局\n");
empty (arr, H, L);
break;
}

computer_move(arr, H, L);//电脑走
display_board(arr, H, L);//打印棋盘
ret = is_win(arr, H, L);//判断输赢
if (ret == '0')
{
printf("电脑赢\n");
//empty (arr, H, L);
break;
}
else if (ret == 'P')
{
printf ("平局\n");
empty (arr, H, L);
break;
}
}

}
int main()
{
int input = 0;
srand ((unsigned) time (NULL));
do
{
menu ();

printf ("请选择1(play)/0(exit):\n");
scanf ("%d",&input);

switch (input)
{
case 0:printf ("结束游戏\n");
break;
case 1:
game ();
break;
default :printf ("输入错误\n");
break;
}
}   while(input);

system ("pause");
return 0;
}


game.c(游戏的主要代码)

#include "game.h"

//打印棋盘
void display_board (char arr[H][L],int h,int l)
{
int i, j;
for (i=0; i<h; ++i)
{
for (j=0; j<l; ++j)
{
printf (" %c ",arr[i][j]);
if (j<(l-1))
{
printf ("|");
}
}
printf ("\n");
if (i < (h-1))
{
for (j=0; j<h; ++j)
{
printf ("--- ");
}
printf ("\n");
}
}
}
//玩家走
void player_move(char arr[H][L], int h, int l)
{
int a = 0, b = 0;
printf ("请输入你要走的坐标:\n");
while (1)
{
scanf ("%d%d",&a,&b);
if ((a>0&&a<=h) && (b>0&&b<= l))//判断坐标合法性
{
if(arr[a-1][b-1] == ' ')//判断该坐标有没有被占用
{
arr[a-1][b-1] = 'X';
break;
}
else
{
printf ("该坐标已经被占用,请重新输入:\n");
}
}
else
{
printf ("非法坐标,请重新输入:\n");
}
}
}
// 电脑走
void computer_move(char arr[H][L], int h, int l)
{
while (1)
{
int i = (rand ()) % 3;
int j = (rand ()) % 3;

if(arr[i][j] == ' ')//判断该坐标有没有被占用
{
arr[i][j] = '0';
printf ("电脑走的坐标:%d %d\n",i+1,j+1);
break;
}
}
}

char is_win(char arr[H][L], int h, int l)
{
int i = 0, j = 0, count1, count2, count3, count4 ;
//横
for (i=0;i<h;++i)
{
count1 = 0;
for (j=0; j<l-1; ++j)
{
if (arr[i][j] == arr[i][j+1])
{
count1 ++;
if (count1 == l-1)
{
return arr[i][j];
}
}
}
}

//竖

for (i=0;i<l;++i)
{
count2 = 0;
for (j=0; j<h-1; ++j)
{
if (arr[j][i] == arr[j+1][i])
{
count2 ++;
if (count2 == h-1)
{
return arr[j][i];
}
}
}
}

//斜
//正对角线
count3=0;
for (i=0; i<l-1;++i)
{
if (arr[i][i] == arr[i+1][i+1])
count3 ++;
if (count3 == l-1)
return arr[i][i];
}
// 反对角线
i = l-1;
j = 0;
count4 = 0;
while (i>=0)
{
if (arr[i][j] == arr[i-1][j+1])
{
count4 ++;
}
if (count4 == l-1)
{
return arr[i][j];
}
i--;
j++;
}

//判断棋盘是否填满
for (i=0; i<h; ++i)
{
for (j=0; j<l; ++j)
{
if (arr[i][j] == ' ')
return '1';
}
}
return 'P';
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 三子棋游戏