C++实现简单五子棋游戏_C 语言

来源:脚本之家  责任编辑:小易  

局域网内还是比较简单的;udp,tcp都可以选择;你要考虑的几个问题:1、命令通道,用来传输落子,暂停,开始等命令;2、两个棋盘的界面刷新同步,可以再加一条同步刷新命令后台;3、上面两条保证了就基本ok了,实现c++ 就用socket,查询相关资料很简单的ps1、用udp的话更简单些,局域网内udp可靠性还算可以2、用tcp的话就要长连接,控制相关性强一些,但是要考虑断连重连的问题,以及断开后处理脏数据的问题www.zgxue.com防采集请勿采集本网。

五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。

天呀,这个东西没有几万块是不会有人给你作的。你在这儿出这个难题。不如这样,你凑几个人,我也加入,我们一起讨论,一起作,五子棋高手专们编写机器如何应对的那部分。喜欢编写GUI的编写GUI。

规则

(1)对局双方各执一色棋子。

其余都简单,难的是AI的编写,你可以去华夏联盟看看,学习学习

(2)空棋盘开局。

1.先独立完成 数据结构,最简单的办法就用一个二维数组表来模拟五子棋的棋盘 2.用MFC做界面,或者是 用OPENCV(个人推荐这个,这个比MFC简单)里面对于做界面 有 一些函数,必然绘制直线,绘制圆

(3)黑先、白后,交替下子,每次只能下一子。

呵呵 这个很简单,自己多想想,找找资料.毕业设计要自己动手做,能力是在自己做的时候慢慢提升的.哥相信你能行的.

(4)棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。

这里有好多基础的代码http://pan.baidu.com/s/1pJiB7i7 你如果想要的话我用mfc做过两个小游戏 我给你发过去

(5)黑方的第一枚棋子可下在棋盘任意交叉点上。

(6)轮流下子是双方的权利,但允许任何一方放弃下子权(即:PASS权)

五子棋对局,执行黑方指定开局、三手可交换、五手两打的规定。整个对局过程中黑方有禁手,白方无禁手。黑方禁手有三三禁手、四四禁手和长连禁手三种。

实现方案

通过缩小棋盘来抑制五子棋先行的优势,在这里使用15路棋盘。

(1)提供3个选择模式

(2)输入坐标(注意横纵坐标之间需要空格)

(3)输入非法坐标

(4)判断输赢 判断行是否满足条件 判断列是否满足条件 判断主对角线是否满足条件 判断副对角线是否满足条件

之后可选择yes再来一局,也可以选择no退出游戏。

源代码如下:

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>using namespace std;const int N = 15; //15*15的棋盘const char ChessBoard = ' '; //棋盘标志const char flag1 = 'o'; //玩家1或电脑标志const char flag2 = 'x'; //玩家2标志typedef struct Position{ //坐标 int row; //行 int col; //列}Position;class GoBang{ //五子棋类public: GoBang(){ InitChessBoard(); //初始化棋盘 } void Play(){ //下棋 Position Play1; //玩家1或电脑 Position Play2; //玩家2 while (1){ int mode = ChoiceMode(); while (1){ if (mode == 1){ //电脑VS玩家 ComputerChess(Play1, flag1); //电脑走 if (GetVictory(Play1, 0, flag1)){ //0代表电脑,为真则表示电脑获胜 break; } PlayChess(Play2, 2, flag2); //玩家2走 if (GetVictory(Play2, 2, flag2)){ //2代表玩家2 break; } } else{ //玩家1VS玩家2 PlayChess(Play1, 1, flag1); //玩家1走 if (GetVictory(Play1, 1, flag1)){ //玩家1赢 break; } PlayChess(Play2, 2, flag2); //玩家2走 if (GetVictory(Play2, 2, flag2)){ //玩家2赢 break; } } } cout << "======再来一局=======" << endl; cout << "yes or no :"; char s[] = "yes"; cin >> s; if (strcmp(s, "no") == 0){ break; } } }protected: void InitChessBoard(){ //初始化棋盘 for (int i = 0; i < N + 1; ++i){ for (int j = 0; j < N + 1; ++j){ _ChessBoard[i][j] = ChessBoard; } } } int ChoiceMode(){ //选择模式 system("cls"); //系统调用,清屏 InitChessBoard(); //重新初始化棋盘 cout << "*************************************************" << endl; cout << "******************0、退出************************" << endl; cout << "******************1、电脑VS玩家******************" << endl; cout << "******************2、玩家VS玩家******************" << endl; cout << "*************************************************" << endl; while (1){ int i = 0; cout << "请选择模式:"; cin >> i; if (i == 0){ //退出 exit(1); } if (i == 1 || i == 2){ return i; } else{ cout << "非法输入,请重新输入!" << endl; } } } void PrintChessBoard(){ //打印棋盘 printf(" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n"); printf(" |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n"); for (int i = 1; i < N + 1; ++i) { printf("%2d ", i); printf("| %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n", _ChessBoard[i][1], _ChessBoard[i][2], _ChessBoard[i][3], _ChessBoard[i][4], _ChessBoard[i][5], _ChessBoard[i][6], _ChessBoard[i][7], _ChessBoard[i][8], _ChessBoard[i][9], _ChessBoard[i][10], _ChessBoard[i][11], _ChessBoard[i][12], _ChessBoard[i][13], _ChessBoard[i][14], _ChessBoard[i][15]); printf(" |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n"); } cout << endl; } void ComputerChess(Position& pos, char flag){ //电脑走 //PrintChessBoard(); //打印棋盘 int x = 0; int y = 0; while (1){ //循环查找空位置 x = (rand() % N) + 1; //产生从1~N的随机数 srand((unsigned int)time(NULL)); y = (rand() % N) + 1; //产生从1~N的随机数 srand((unsigned int)time(NULL)); if (_ChessBoard[x][y] == ChessBoard){ //如果这个位置为空(没有棋子),跳出循环,下棋 break; } } pos.row = x; pos.col = y; _ChessBoard[pos.row][pos.col] = flag; } void PlayChess(Position& pos, int player, char flag){ PrintChessBoard(); //打印棋盘 while (1){ printf("请玩家%d输入坐标:", player); cin >> pos.row >> pos.col; if (JudgeValue(pos) == 1){ //判断坐标是否合法 break; } cout << "坐标不合法,请重新输入:" << endl; } _ChessBoard[pos.row][pos.col] = flag; } int JudgeValue(const Position& pos){ //判断坐标的合法性 //1.在棋盘上 if (pos.row > 0 && pos.row <= N && pos.col > 0 && pos.col <= N){ //2.所在位置为空(没有棋子) if (_ChessBoard[pos.row][pos.col] == ChessBoard){ return 1; //合法 } } return 0; //非法 } int JudgeVictory(Position pos, char flag){ //判断是否有玩家获胜(底层判断) int begin = 0; int end = 0; //1.判断行是否满足条件 (pos.col - 4) > 0 ? begin = (pos.col - 4) : begin = 1; (pos.col + 4) > N ? end = N : end = (pos.col + 4); for (int i = pos.row, j = begin; j + 4 <= end; ++j){ if (_ChessBoard[i][j] == flag && _ChessBoard[i][j + 1] == flag && _ChessBoard[i][j + 2] == flag && _ChessBoard[i][j + 3] == flag && _ChessBoard[i][j + 4] == flag) return 1; } //2.判断列是否满足条件 (pos.row - 4) > 0 ? begin = (pos.row - 4) : begin = 1; (pos.row + 4) > N ? end = N : end = (pos.row + 4); for (int j = pos.col, i = begin ; i + 4 <= end; ++i){ if (_ChessBoard[i][j] == flag && _ChessBoard[i + 1][j] == flag && _ChessBoard[i + 2][j] == flag && _ChessBoard[i + 3][j] == flag && _ChessBoard[i + 4][j] == flag) return 1; } //3.判断主对角线是否满足条件 int len = 0; //相对长度 int start = 0; int finish = 0; pos.row > pos.col ? len = pos.col - 1 : len = pos.row - 1; if (len > 4){ len = 4; } begin = pos.row - len; //横坐标起始位置 start = pos.col - len; //纵坐标起始位置 pos.row > pos.col ? len = N - pos.row : len = N - pos.col; if (len > 4){ len = 4; } end = pos.row + len; //横坐标结束位置 finish = pos.col + len; //纵坐标结束位置 for (int i = begin, j = start; (i + 4 <= end) && (j + 4 <= finish); ++i, ++j){ if (_ChessBoard[i][j] == flag && _ChessBoard[i + 1][j + 1] == flag && _ChessBoard[i + 2][j + 2] == flag && _ChessBoard[i + 3][j + 3] == flag && _ChessBoard[i + 4][j + 4] == flag) return 1; } //4.判断副对角线是否满足条件 (pos.row - 1) > (N - pos.col) ? len = N - pos.col : len = pos.row - 1; if (len > 4){ len = 4; } begin = pos.row - len; //横坐标起始位置 start = pos.col + len; //纵坐标起始位置 (N - pos.row) > (pos.col - 1) ? len = pos.col - 1 : len = N - pos.row; if (len > 4){ len = 4; } end = pos.row + len; //横坐标结束位置 finish = pos.col - len; //纵坐标结束位置 for (int i = begin, j = start; (i + 4 <= end) && (j - 4 >= finish); ++i, --j){ if (_ChessBoard[i][j] == flag && _ChessBoard[i + 1][j - 1] == flag && _ChessBoard[i + 2][j - 2] == flag && _ChessBoard[i + 3][j - 3] == flag && _ChessBoard[i + 4][j - 4] == flag) return 1; } //该位置并未下棋 for (int x = 1; x < N + 1; ++x){ for (int y = 1; y < N + 1; ++y){ if (_ChessBoard[x][y] == ChessBoard){ return 0; //未下棋 } } } return -1; //和局 } bool GetVictory(Position& pos, int player, char flag){ //判断具体哪位玩家赢 if (JudgeVictory(pos, flag) != 0){ //判断有无人获胜 if (JudgeVictory(pos, flag) == 1){ //判断是否有人获胜,1表示获胜 PrintChessBoard(); //打印棋盘 if (player == 0){ cout << "电脑获胜!" << endl; } else{ printf("恭喜玩家%d获胜!\n", player); } } else{ printf("和局!\n"); } return true; //有人获胜 } return false; //没人获胜 }private: char _ChessBoard[N + 1][N + 1]; //棋盘};int main(){ GoBang g; g.Play(); system("pause"); return 0;}

很多年前用 C++builder 写的代码了,界面你参考一下吧,希望能帮到你内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 使用c++ mfc编写一个简单的五子棋游戏程序
  • 基于c++ ege图形库实现五子棋游戏
  • c++简单五子棋的ai设计实现
  • c++语言设计实现五子棋
  • c++实现五子棋小程序
  • 基于c++实现五子棋ai算法思想
  • c++实现五子棋游戏
  • c++程序设计-五子棋
  • c++面向对象实现五子棋小游戏
  • onsize、onsizing和ongetminmaxinfo区别分析
  • c++嵌套类与局部类详细解析
  • c语言中编写可变参数函数
  • c++直接初始化与复制初始化的区别深入解析
  • c++求四个正整数最大公约数的方法
  • c++实现顺序表的常用操作(插入删出查找输出)
  • 详解c++成员函数的override和final说明符的用法
  • c语言中操作密码文件的一些函数总结
  • c++基本算法思想之递推算法思想
  • c++中四种加密算法之des源代码
  • 用C/C++制作一个简单的五子棋游戏,怎样去制作和美化游戏的界面?希望尽量详细解答,多谢
  • c++写了一个五子棋小游戏,想实现局域网对战功能
  • 求极简单五子棋cc++源码
  • 用C++编写的小游戏源代码
  • 可以帮我提供一个c语言写的五子棋(人机对战),不要夹杂c++,只要c语
  • 关于一个C++编写五子棋
  • 如何用纯C语言程序在visual C++设计一个五子棋的初始页面
  • 急!在线等。急求一个C++开发的五子棋游戏程序。不用太复杂,最简单就是人人对战,更好一点可以人机对战
  • c++游戏编程,写一个游戏编程,简单点
  • 想做一些小游戏的程序比如推箱子俄罗斯方块五子棋只学过C语言C++数据结构请问还需要学些什么?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页使用c++ mfc编写一个简单的五子棋游戏程序基于c++ ege图形库实现五子棋游戏c++简单五子棋的ai设计实现c++语言设计实现五子棋c++实现五子棋小程序基于c++实现五子棋ai算法思想c++实现五子棋游戏c++程序设计-五子棋c++面向对象实现五子棋小游戏onsize、onsizing和ongetminmaxinfo区别分析c++嵌套类与局部类详细解析c语言中编写可变参数函数c++直接初始化与复制初始化的区别深入解析c++求四个正整数最大公约数的方法c++实现顺序表的常用操作(插入删出查找输出)详解c++成员函数的override和final说明符的用法c语言中操作密码文件的一些函数总结c++基本算法思想之递推算法思想c++中四种加密算法之des源代码c语言程序设计50例(经典收藏)c语言10个经典小程序c语言字符串操作总结大全(超详细c语言文件操作函数大全(超详细)c语言字符数组与字符串的使用详解c语言运算符优先级列表(超详细)c语言/c++中如何产生随机数c++中的string常用函数用法总结深入理解c++中public、protectedc++常用字符串分割方法实例汇总c++ map 根据value找key的实现如何查看进程实际的内存占用情况详解c语言实现纸牌游戏之小猫钓鱼算法c++ 二叉搜索树(bst)的实现方法c语言实现的顺序表功能完整实例c语言顺序表实现代码排错c++中const、volatile、mutable使用方法小static全局变量与普通的全局变量的区别详c++常量详解c++输入一个字符串,把其中的字符按照逆序
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved