简单的三子棋游戏尝试

在这个简单的三子棋游戏中,只存在玩家和电脑的游戏模式,而电脑的下棋方式是完全随机的,所以属于比较简单的编程。

       下面将要展示源代码:


  主文件:main.c(上层的具体调用)
#include "game.h"


void menu(){
printf("**************************\n");
printf("**   1.play  2.exit  *****\n");
printf("**************************\n");
printf("Please Select:\n");


}

int main(){
int select = 0;
do{
menu();
scanf("%d",&select);
switch (select){
case 1:
game();
break;
case 2:
exit(0);
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (1);




system("pause");
return 0;
}

game.c    主文件:(游戏的主要逻辑)
#include "game.h"


static void displayBoard(char board[ROW][COL], int row ){
int i = 0; 
for (; i < row; i++){
printf(" %c | %c | %c \n", \
board[i][0],board[i][1],board[i][2]);
if (i < row - 1){
printf("---|---|---\n");
}
}
}
static void playermove(char board[ROW][COL],int row){
int x, y;
do{
printf("请输入你的棋子所在的位置 <x,y>:");
scanf("%d%d", &x, &y);
if (x >= 1 && x <= 3 && y >= 1 && y <= 3){
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = 'x';
break;
}
else{
printf("输入的位置已被占用\n");
}
}
else{
printf("输入错误,请重新输入:\n");
}
} while (1);


}
static void computermove(char board[ROW][COL], int row){
srand((unsigned long)time(NULL));
int x, y;
do{
x = rand() % row;
y = rand() % COL;
if (board[x][y] == ' '){
board[x][y] = 'o';
break; 
}
} while (1);
}
static int isfull(char board[ROW][COL], int row){
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (board[i][j] ==' '){
return 0;
}
}
}
return 1;
}
static char iswin(char board[ROW][COL], int row){
int i = 0;
for (; i < row; i++){
if (board[i][0] == board[i][1] && \
board[i][1] == board[i][2] && \
board[i][0] != ' ')
{
return board[i][0];
}
}
for (i=0; i < COL; i++){
if (board[0][i] == board[1][i] && \
board[1][i] == board[2][i] && \
board[0][i] != ' ')
{
return board[1][i];
}
}
if (board[0][0] == board[1][1] && \
board[1][1] == board[2][2] && \
board[1][1] != ' '){
return board[1][1];
}
if (board[0][2] == board[1][1] && \
board[1][1] == board[2][0] && \
board[1][1] != ' '){
return board[1][1];
}
if (isfull(board,row)){
return 'q';
}
return ' ';
}


void game(){


char board[ROW][COL];
memset(board, ' ', COL*ROW);//memset函数:memset(函数名,'富裕的数值或者符号',长度)memset函数常用来
//做初始化和赋0值操作


char ret;
do{
displayBoard(board,ROW);//面板展示
playermove(board, ROW);//玩家放x,o表示电脑,q表示平局,没下完    表示玩家下棋方式
ret = iswin(board, ROW);//判断胜负条件
if (ret!=' '){
break;
}
computermove(board, ROW);//电脑下棋方式
ret = iswin(board, ROW);
} while (ret==' ');
if (ret == 'q'){
printf("平局\n");
}
else if (ret == 'x'){
printf("玩家赢了\n");
}
else if(ret == 'o'){
printf("电脑赢了\n");
}
else{
printf("debug!\n");
}
}
game.h   头文件:(游戏的相关声明和头文件)
#ifndef _GAME_H_
#define _GAME_H_


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

#pragma warning(disable:4996) 

#define ROW 3
#define COL 3
void game();

#endif

猜你喜欢

转载自blog.csdn.net/sd116460/article/details/80008233
今日推荐