【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
- 【c语言】棋盘游戏--三子棋
- c语言棋盘游戏
- 【C语言】 棋盘游戏
- C语言实现小游戏(三) 3*3棋盘游戏
- 用C语言实现“智障”的棋盘游戏
- 利用c语言实现在一个3*3棋盘游戏
- C语言:3*3棋盘实现三子棋
- 【经典游戏编程题】C语言:编写一个棋盘游戏,与二维数组结合
- 棋盘游戏(三子棋)
- C语言-三子棋游戏
- 【C语言】三子棋游戏
- c语言三子棋游戏
- C语言二分图匹配(4)___棋盘游戏(Hdu 1281)
- 三子棋(c语言) 棋盘大小可随意
- C语言实现三子棋游戏
- C语言实现三子棋游戏
- C语言实现三子棋游戏
- 棋盘游戏
- Android5种参数传递汇总
- linux下安装ftp服务器
- 51单片机内存管理
- UISegmentedControl的详细使用
- 统计图颜色分段展示
- 【c语言】棋盘游戏--三子棋
- 【Windows】加密服务
- 软件开发方法
- 微信小程序学习笔记(2)--------框架之目录结构
- java异常,java.text.ParseException: Unparseable date: "",原因
- JAVA CAS原理深度分析
- Karma自动化测试
- Android开发 Error(建议收藏下来以备不时之需):The number of method references in a .dex file cannot exceed 64K.
- 父级div高固定 子级两个div上下 上边div高固定 下边自适应