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

三子棋游戏(简单)————C语言实现

2017-12-04 13:30 821 查看


三子棋游戏(简单)————C语言实现

game1



在学完数组后可以尝试编一个简单的三子棋游戏,用二维数组、函数、随机数的生成和预处理指令来完成。


实现的功能:

1.棋盘的初始化 

2.棋盘的打印 

3.玩家下棋 

4.电脑下棋 

5.判断输赢


玩家下棋时输入的横纵坐标范围是(1 ~ 3),而数组第一个元素的下标的以 0 开始的,所以在编代码的时候得注意一下。


电脑下棋的时候坐标是用随机生成的,所以编三子棋游戏你要学会怎么生成一个随机数。电脑下棋的时候横纵坐标范围是(0 ~ 2),不用像玩家下棋的时候那样处理了。


判断输赢的时候有四种情况:1.玩家赢;2.电脑赢;3.平局;4.还没下完,继续游戏。


示例代码如下:


1. game.h用于函数定义

#define _CRT_SECURE_NO_WARNINGS 1

#ifndef __GAME_H__

#define __GAME_H__


#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <time.h>


#define ROW 3

#define COL 3


void printboard(char board[ROW][COL],int row,int col);      //打印棋盘

void initboard(char board[ROW][COL],int row,int col);       //初始化棋盘

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

void computermove(char board[ROW][COL],int row,int col);    //电脑下棋

char checkwin(char board[ROW][COL],int row,int col);        //判输赢

int isfull(char board[ROW][COL],int row,int col);           //判断棋盘是否为满


#endif //__GAME_H__



2.源文件test.c用于存放主函数

#define _CRT_SECURE_NO_WARNINGS 1


#include "game.h"

void game()

{

char ret = 0;

char board[ROW][COL]={'0'};

initboard(board,ROW,COL);

printboard(board,ROW,COL);

while(1)

{

playermove(board,ROW,COL);

printboard(board,ROW,COL);

ret = checkwin(board,ROW,COL);

if(ret == 'X')

{

printf("恭喜你赢了!\n");

break;

}

else if (ret == <
216cc
span class="str" style="color:rgb(0,136,0);">'Q')

{

printf ("平局\n");

break;

}



computermove(board,ROW,COL);

printboard(board,ROW,COL);

ret = checkwin(board,ROW,COL);

if (ret == '0')

{

printf ("电脑赢!\n");

break;

}

}



}


void game2()

{

char ret = 0;

char board[ROW][COL]={'0'};

initboard(board,ROW,COL);

printboard(board,ROW,COL);

while(1)

{

computermove(board,ROW,COL);

printboard(board,ROW,COL);

ret = checkwin(board,ROW,COL);

if (ret == '0')

{

printf ("电脑赢!\n");

break;

}

else if (ret == 'Q')

{

printf ("平局\n");

break;

}


playermove(board,ROW,COL);

printboard(board,ROW,COL);

ret = checkwin(board,ROW,COL);

if(ret == 'X')

{

printf("恭喜你赢了!\n");

break;

}

}

}


void menu2()

{

printf ("          *****************************************\n");

printf ("          **    1.玩家先走        2.电脑先走     **\n");

printf ("          *****************************************\n");

}


void menu()

{

printf ("--------------------欢迎来到三子棋游戏--------------------\n");

printf ("          *****************************************\n");

printf ("          **         1.play        0.exit        **\n");

printf ("          *****************************************\n");

}


void main2()

{

int input = 0;


printf ("请输入你的选择:");

scanf ("%d",&input);

switch (input)

{

case 1:

game();

break;

case 2:

game2();

break;

default:

printf ("输入错误,请重新选择!\n");

}


}


int main ()

{

int input = 0;

srand ((unsigned int)(time (NULL)));

do

{

menu();

printf ("请输入你的选择:");

scanf ("%d",&input);

switch (input)

{

case 1:

menu2();

main2();

break;

case 0:

break;

default:

printf ("输入错误,请重新选择!\n");

}

}while(input);

system("pause\n");

return 0;

}



3.源文件game.c实现游戏的函数

#define _CRT_SECURE_NO_WARNINGS 1


#include "game.h"


//打印棋盘

void printboard(char board[ROW][COL],int row,int col)

{

int i = 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");

}

}


//初始化

void initboard(char board[ROW][COL],int row,int col)

{


memset(board,' ',row * col * sizeof(board[0][0]));

}


//玩家走

void playermove(char board[ROW][COL],int row,int col)

{

int x = 0;

int y = 0;

printf("玩家走:\n");

while (1)

{

printf ("请输入坐标: ");

scanf ("%d%d",&x,&y);

if (x >= 1 && x <= row && y >= 1 && y <= col && board[x-1][y-1] == ' ')

{

board[x-1][y-1] = 'X';

break;

}

else

printf("坐标不合法,请重新输入\n");

}

}


//电脑走

void computermove(char board[ROW][COL],int row,int col)

{

int x = 0;

int y = 0;

printf ("电脑走:\n");

while(1)

{

x = rand()%3;

y = rand()%3;

if (board[x][y] == ' ')

{

board[x][y] = '0';

break;

}

}

}




//判棋盘是否满了

int isfull(char board[ROW][COL],int row,int col)

{

int i = 0;

int j = 0;

for(i = 0; i < row; i++)

{

for (j = 0; j < col; j++)

{

if (board[i][j] == ' ')

            return 0;



}

}

return 1;

}


//判输赢

char checkwin(char board[ROW][COL],int row,int col)

{

int i = 0;


//1.玩家赢 返回‘X’2.电脑赢 返回 ‘0’


for (i = 0; i < row; i++)  //三行

{

if (board[i][0] == board[i][1] && board[i][1] == board[i][2])

return board[i][0];

}

for (i = 0; i < col; i++)   //三列

{

if (board[0][i] == board[1][i] && board[1][i] == board[2][i])

return board[0][i];

}

if (board[0][0]== board[1][1] && board[1][1] == board[2][2])   //对角线

return board[0][0];

if (board[0][2]== board[1][1] && board[1][1] == board[2][0])

return board[0][0];

//3.平局  返回 ‘Q’//4.继续玩 返回 ' '

if (isfull(board,ROW,COL))

return 'Q';

else

return ' ';

}



以上程序在vs2008中可运行

+
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: