【c语言】棋盘游戏--三子棋

来源:互联网 发布:手机图片格式转换软件 编辑:程序博客网 时间:2024/06/05 15:42

一、问题概述

大家都玩过棋盘游戏吧,像五子棋一样,玩家或者是电脑一人下一次,当玩家或者是电脑的某一方先将各自的五个棋子下成一条线时,谁就赢,棋盘游戏就会结束。

                           

当然,我今天要介绍的是三子棋,和五子棋的原理是一样的,当玩家或者是电脑的某一方先将各自的三个棋子下成一条线时,谁就赢,棋盘游戏就会结束。

下面我们用如下棋盘模拟一下电脑上的棋盘:

      

有一点点小,害羞不要嫌弃哈。这就是初始的棋盘。那些空格的位置就是需要下棋的地方。

二、解决方案


(1)初始化棋盘,将棋盘可以要下的地方初始化为空格,这里我们用二维数组来存放这些空格,以便后边的替换;

(2)开始游戏时,先让玩家玩,输入玩家要下的坐标,然后让电脑玩,给定随机的坐标即可。

(3)当三个坐标成一条直线时,则下的那一方就赢。(判断坐标成一线)


三、实现代码

//ThreeChess.h

#define _CRT_SECURE_NO_WARNINGS 1#pragma once#define Row 3#define Col 3#include<string.h>#include<time.h>#include<stdlib.h>#include<stdio.h>//打印棋盘void PrintChess(char arr[][Col],int row){printf("%c|%c|%c\n",arr[0][0],arr[0][1],arr[0][2]);printf("------\n");printf("%c|%c|%c\n",arr[1][0],arr[1][1],arr[1][2]);printf("------\n");printf("%c|%c|%c\n",arr[2][0],arr[2][1],arr[2][2]);}//玩家下棋void Player(char arr[][Col],int row){int x = 0;int y = 0;printf("玩家玩\n");printf("请输入坐标:>");scanf("%d%d",&x,&y);x = x-1;y = y-1;while(arr[x][y] != ' '){printf("输入数据不合法,请重新输入!\n");printf("请输入坐标:>");scanf("%d%d",&x,&y);x = x-1;       //现实中的坐标和计算机中的坐标相差1,所以横纵坐标各减1y = y-1;}if(arr[x][y] == ' '){arr[x][y] = '*';}PrintChess(arr,row);}//电脑下棋void Computer(char arr[][Col],int row){int x = rand()%row;int y = rand()%Col;printf("电脑玩\n");while(arr[x][y] != ' '){x = rand()%row;y = rand()%Col;}if(arr[x][y] == ' '){arr[x][y] = '#';}PrintChess(arr,row);}int Check(char arr[][Col]){int j = 0;int i = 0;int count = 0;//判断是否三个坐标为一条线for(i = 0;i < 3;i++){if((((arr[i][0] == arr[i][1])&&(arr[i][1] == arr[i][2]))&&(arr[i][1]== '*')) ||(((arr[0][i] == arr[1][i])&& (arr[1][i]== arr[2][i]))&&(arr[1][i]== '*')) ||(((arr[0][0] == arr[1][1])&&(arr[1][1]== arr[2][2]))&&(arr[1][1]== '*')) ||(((arr[0][2] == arr[1][1])&&(arr[1][1]== arr[2][0]))&&(arr[1][1]== '*'))){return 1; }if((((arr[i][0] == arr[i][1])&&(arr[i][1] == arr[i][2]))&&(arr[i][1]== '#')) ||(((arr[0][i] == arr[1][i])&& (arr[1][i]== arr[2][i]))&&(arr[1][i]== '#')) ||(((arr[0][0] == arr[1][1])&&(arr[1][1]== arr[2][2]))&&(arr[1][1]== '#')) ||(((arr[0][2] == arr[1][1])&&(arr[1][1]== arr[2][0]))&&(arr[1][1]== '#'))){return -1; }for(j = 0; j < 3;j++){if(arr[i][j] != ' '){count++;}}}if(count == 9){printf("平局\n");}}void Game(){char arr[Row][Col];int i = 0;int j = 0;memset(arr,' ',sizeof(char)*Row*Col);PrintChess(arr,Row);while(1){Player(arr,Row);if(Check(arr) == 1){printf("玩家赢!\n");return;}Computer(arr,Row);if(Check(arr) == -1){printf("电脑赢!\n");return;}}}

//ThreeChess.c

#include"ThreeChess.h"#define _CRT_SECURE_NO_WARNINGS 1void FunTest(){int select = 0;while(1){printf("------------------------------------\n");printf("------------- 1. play---------------\n");printf("------------- 2. exit---------------\n");printf("请选择:>\n");scanf("%d",&select);switch(select){case 1:Game();break;case 2:return;default:break;}}}int main(){FunTest();return 0;}


四、运行结果




1 0