C++实现五子棋小程序

这是一个用C++写的五子棋的小程序,关于A若是占据了已经下了的位置处理的不好。改动 hight,与width ,与q[][] 可以将棋盘扩大。

#include<iostream>
#include<vector>
using namespace std;

class qipan
{
public:
 qipan() {}
 ~qipan() {};

 //向上下左右,斜的方向
 char left(int x, int y)
 {//检查是否合适
 if (x >= 1 && x <= hight&& y - 1 >= 1 && y - 1 <= width)
 {
  return q[x][y - 1];
 }
 else {
  return 'F';
 }

 }
 char right(int x, int y)
 {
 if (x >= 1 && x <= hight&&y + 1 >= 1 && y + 1 <= width)
 {
  return q[x][y + 1];
 }
 else {
  return 'F';
 }

 }
 char up(int x, int y)
 {
 if (x - 1 >= 1 && x - 1 <= hight && y >= 1 && y <= width)
 {
  return q[x - 1][y];
 }
 else {
  return 'F';
 }

 }
 char down(int x, int y)
 {
 if (x + 1 >= 1 && x + 1 <= hight && y >= 1 && y <= width)
 {
  return q[x + 1][y];
 }
 else {
  return 'F';
 }

 }
 char left_up(int x, int y)
 {
 if (x - 1 >= 1 && x - 1 <= hight && y - 1 >= 1 && y - 1 <= width)
 {
  return q[x - 1][y - 1];
 }
 else {
  return 'F';
 }

 }
 char left_down(int x, int y)
 {
 if (x + 1 >= 1 && x + 1 <= hight && y - 1 >= 1 && y - 1 <= width)
 {
  return q[x + 1][y - 1];
 }
 else {
  return 'F';
 }

 }
 char right_up(int x, int y)
 {
 if (x - 1 >= 1 && x - 1 <= hight && y + 1 >= 1 && y + 1 <= width)
 {
  return q[x - 1][y + 1];

 }
 else {
  return 'F';
 }

 }
 char right_down(int x, int y)
 {
 if (x + 1 >= 1 && x + 1 <= hight && y + 1 >= 1 && y + 1 <= width)
 {
  return q[x + 1][y + 1];
 }
 else {
  return 'F';
 }
 }

 void init_cur() {
 h_cur = hang;
 l_cur = lie;

 }
 bool win()
 {
 bool WIN = false;
 char temp = q[hang][lie];

 //以上为例,每次先看上面的5个,假如一样,iter++;否则 break;再加上下的方向,同样iter++;最后iter+1==5,WIN=true;并且退出
 //各个方向重复,上下左右,斜着的。
 //赢了直接退出。
 //显示是谁赢了

 //左右
 int count_lr = 1;
 init_cur();
 for (int i = 0; i < 4; i++)
 {

  if (left(h_cur, l_cur) == temp)
  count_lr++;
  else
  break;
  l_cur--;

 }
 init_cur();
 for (int i = 0; i < 4; i++)
 {

  if (right(h_cur, l_cur) == temp)
  count_lr++;
  else
  break;
  l_cur++;

 }
 if (count_lr == 5)
  WIN = true;
 //上下
 int count_ud = 1;
 init_cur();
 for (int i = 0; i < 4; i++)
 {

  if (up(h_cur, l_cur) == temp)
  count_ud++;
  else
  break;
  h_cur--;

 }
 init_cur();
 for (int i = 0; i < 4; i++)
 {

  if (down(h_cur, l_cur) == temp)
  count_ud++;
  else
  break;
  h_cur++;

 }
 if (count_ud == 5)
  WIN = true;

 //左斜
 int count_lt = 1;
 init_cur();
 for (int i = 0; i < 4; i++)
 {

  if (left_up(h_cur, l_cur) == temp)
  count_lt++;
  else
  break;
  h_cur--;
  l_cur--;

 }
 init_cur();
 for (int i = 0; i < 4; i++)
 {

  if (left_down(h_cur, l_cur) == temp)
  count_lt++;
  else
  break;
  h_cur++;
  l_cur--;

 }
 if (count_lt == 5)
  WIN = true;

 //右边斜
 int count_rt = 1;
 init_cur();
 for (int i = 0; i < 4; i++)
 {

  if (right_up(h_cur, l_cur) == temp)
  count_rt++;
  else
  break;
  h_cur--;
  l_cur++;

 }
 init_cur();
 for (int i = 0; i < 4; i++)
 {

  if (right_down(h_cur, l_cur) == temp)
  count_rt++;
  else
  break;
  h_cur++;
  l_cur++;

 }
 if (count_rt == 5)
  WIN = true;

 return WIN;
 }

 void qipan_array()
 {
 for (int i = 0; i < hight; i++) {
  for (int j = 0; j < width; j++)
  q[i][j] = '+';
 }
 }

 void prin_qipan()
 {
 //打印二维数组;每一行要打印上行号,以及列号
 for (int i = 0; i <hight; i++)
 {

  for (int j = 0; j < width; j++)
  {
  cout << q[i][j] << " ";

  }
  cout << i;
  cout << endl;
 }

 for (int j = 0; j <width; j++)
 {
  cout << j << " ";
 }
 cout << endl << "________________________________" << endl;
 }
 int xiaqi(int player)
 {
 if (player == 1) {
  q[hang][lie] = '*';
 }
 else if (player == 2)
 {
  q[hang][lie] = '@';
 }
 else
  cout << "input player is wrong" << endl;
 return 0;
 }

 //初始化行列
 int gethang(int h)
 {

 hang = h;
 return 0;
 }
 int getlie(int l)
 {
 lie = l;
 return 0;
 }

 int h_cur;
 int l_cur;
 const int hight = 9;
 const int width = 9;
 int hang; int lie;
 char q[9][9];
};

int main()
{
 int hang, lie;
 qipan wzq;
 wzq.qipan_array();
 cout << "A 与B 玩五子棋" << endl;
 cout << "A use * and B use @" << endl;
 cout << "________________________________" << endl;
 for (int i = 0; i < 15; i++) {
 cout << "A 输入行: ";
 cin >> hang;
 cout << "A 输入列: ";
 cin >> lie;
 if (wzq.q[hang][lie] != '+')
  cout << "输入的行列数字已经有人占据了" << endl;
 else {
  wzq.gethang(hang);
  wzq.getlie(lie);

  wzq.xiaqi(1);
  wzq.prin_qipan();
  if (wzq.win())
  {
  cout << "A is winner" << endl;
  exit(0);
  }
 }
 //b 开始了
 cout << "B 输入行: ";
 cin >> hang;
 cout << "B 输入列: ";
 cin >> lie;
 if (wzq.q[hang][lie] != '+')
  cout << "输入的行列数字已经有人占据了" << endl;
 else {
  wzq.gethang(hang);
  wzq.getlie(lie);

  wzq.xiaqi(2);

  wzq.prin_qipan();
  if (wzq.win())
  {
  cout << "B is winner" << endl;
  exit(0);
  }
 }
 }
 return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++实现五子棋游戏

    三子棋.五子棋之类的游戏,非常简单,对于初学者来说是一个不错的练手的小项目,以前用C语言写过三子棋游戏.最近在看C++,所以就想到在三子棋的基础上利用C++语言实现五子棋游戏. 主要功能: 有3个模式:0表示退出.1表示电脑vs玩家.2表示玩家vs玩家. 当一局完成之后选择'y'则又会进入选择模式. 源代码(VS2013编译器下写的): #include<iostream> #include<stdio.h> #include<stdlib.h> #include &l

  • 基于c++ ege图形库实现五子棋游戏

    本文分享的五子棋实例,制作基于ege图像库, 首先需要安装配置ege环境 就可以编写小游戏了. 用到的ege库函数不多 , 主要是基于c++的. 先看界面效果: 输入界面:(就是控制台) 游戏胜利界面: 文档如下: 关于五子棋的构思: 实现人人对战的五子棋游戏.使用面向对象的c++ 和 ege库实现. ege的安装过程不在说明 , 在添加编译链接时去掉 -mwindows 选项. dev c++ 的运行环境设置为 TDM-GCC 4.8.1.32-bit Debug 为保险起见,编译时选择菜单栏

  • C++程序设计-五子棋

    前言:很多刚刚接触编程的人都不知道怎么下手编写程序,特别是学习了新的知识点,不知道有什么用,那么本文将以简单的存储结构及简单的运算,条件语句,分支语句,循环语句结合,带来一个双人对战版五子棋,这是一个简单的模型,实现了五子棋最最基本的功能,还有好多地方需要补全,如边界问题,设计问题,游戏逻辑问题,希望读者阅读后能够注意,通过自己的努力来完善它,还能扩展各种功能,如悔棋,网络对战等,有时候写程序和小生命一样,慢慢会成长,而我们作为"父母"的看到自己的小宝宝成为有用之才,过程之欣喜特别棒!

  • C++语言设计实现五子棋

    本文为大家分享了C++五子棋的设计思路和设计实现,供大家参考,具体内容如下 算法思路: 在结束了对C++的学习之后,准备自己编制一些简单的练习程序.目前初步设想是编制一个人机对战的简易五子棋软件. 以下为个人设计思考的过程. 首先,进行问题分析与设计.计划实现的功能为,开局选择人机或双人对战,确定之后比赛开始.比赛结束后初始化棋盘,询问是否继续比赛或退出.后续可加入复盘.悔棋等功能.整个过程中,涉及到了棋子和棋盘两种对象,同时要加上人机对弈时的AI对象,即涉及到三个对象. 棋盘类的设计. 数据存

  • 基于C++实现五子棋AI算法思想

    今天我想要分享一下我做五子棋AI的思路.因为在做这个之前,我没有接触过任何像这种类似的东西.通过这一次,我也算是有所了解,我的思路也是来自很多网络上的博客,看了很多,最终总结出了自己的这样一个. 那我的五子棋是15*15的大小(一般也就是这样的一个大小).我的AI算法要求每一次落子之后都要去计算每一个空暇的位置的"分值",简单的说,我们需要一个存放棋子的数组,表示是否存放了棋子,还要一个计算每一个空格的数组来记录"分数",这个分数是后期AI用来运算的基础,也是你AI

  • C++简单五子棋的AI设计实现

    本文实例为大家分享了C++五子棋的AI设计实现代码,供大家参考,具体内容如下 设计思路:通过接口获取信息来确定颜色,通过set_chess函数来确定落点. 对每个点位给出两种颜色棋子的打分,分别存在两个15*15的数组里,数组下标代表点的位置. 确定最大值所在数组之后,遍历该数组找出所有最大值对应的位置,然后对这些位置统计另一种颜色的棋子的分数,再选取一次最大值,从而确定要落点的位置. 打分函数的设计:在四个方向分别统计然后相加.对于某一个方向的分数统计,则分为正反两个方向进行,统计的时候如果有

  • C++面向对象实现五子棋小游戏

    尽量将面向对象的思想融入进程序中 ChessBoard.h //ChessBoard.h #pragma once #define ROW 15 #define COL 15 #include<iostream> using namespace std; class ChessBoard//棋盘类 { public: char m_cSquare[ROW][COL]; public: ChessBoard(); void show(); }; ChessBoard.cpp //ChessBoa

  • javascript 初学教程及五子棋小程序的简单实现

    一.JavaScript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能. 二.hbulider工具的使用 1) hbulider的特点: 1.飞快的编码速度 2.HBuilder直接创建移动App,打包为ios或Android原生安装包 3.HTML5语法.HTML5+

  • python实现五子棋小程序

    本文实例为大家分享了python实现五子棋小程序的具体代码,供大家参考,具体内容如下 一.结合书上例子,分三段编写: wuziqi.py #coding:utf-8 from win_notwin import * from show_qipan import * maxx=10 #10行10列 maxy=10 qipan=[[0,0,0,0,1,0,0,2,0,0],[0,1,2,1,1,0,2,0,0,0],[0,0,0,0,1,1,0,2,0,0],[0,0,0,0,2,0,0,1,0,0

  • C++实现五子棋小程序

    这是一个用C++写的五子棋的小程序,关于A若是占据了已经下了的位置处理的不好.改动 hight,与width ,与q[][] 可以将棋盘扩大. #include<iostream> #include<vector> using namespace std; class qipan { public: qipan() {} ~qipan() {}; //向上下左右,斜的方向 char left(int x, int y) {//检查是否合适 if (x >= 1 &&a

  • 微信小程序五子棋游戏AI实现方法【附demo源码下载】

    本文实例讲述了微信小程序五子棋游戏AI实现方法.分享给大家供大家参考,具体如下: DEMO下载 五子棋AI篇DEMO 效果图 原理 1. 将棋盘中能够胜利的五子连珠方法遍历一个数组: 2. 当AI持棋时,遍历棋盘中所有棋子的空位: 3. 如果用户落子该位置,给用户该位置的五连珠方式进行加分:1连10分,2连20分,3连40分,4连80分: 4. 如果AI落子该位置,给AI该位置的五连珠方式进行加分:1连15分,2连25分,3连45分,4连85分: 5. 最后对该位置的分值进行比较,取最大分值位置

  • 微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】

    本文实例讲述了微信小程序五子棋游戏的棋盘,重置,对弈实现方法.分享给大家供大家参考,具体如下: DEMO下载 五子棋对弈.悔棋DEMO 效果图 分析 1. 采用微信小程序的canvas制作五子棋: 2. 确定棋盘大小及格数: 3. 绘制棋盘--通过棋盘宽高和格数计算间距,同时保存坐标点: 4. 黑方和白方下子--定义一个布尔变量代表各自的身份: 5. 重置棋盘--重新开始: 6. 通过判断当前棋手,悔棋时进行改变. 绘制棋盘 drawLine(arr){ arr.forEach(current

  • 微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】

    本文实例讲述了微信小程序五子棋游戏的悔棋实现方法.分享给大家供大家参考,具体如下: DEMO下载 五子棋悔棋DEMO 效果图 分析 悔棋功能需要的操作: 1. 判断当前持棋人: 2. 清空棋盘: 3. 将当前持棋人的棋子数组的最后一个棋子还原到全局坐标数组的位置: 4. 删除当前持棋人的棋子数组的该坐标. js this.page.changeUndo = function(e){ if (self.START_GAME){ var lastM = self.myPoint.length - 1

  • Java实现小程序简单五子棋

    本程序适用于java初学者巩固类与对象.事件响应.awt包中各种工具的相关概念以及对逻辑能力的锻炼 需要注意的有: ①要加入java界面的重绘(基本原则) ②由于玩家需要通过鼠标点击,计算机响应出棋子的位置,但却不能保证每次点击都正中棋盘点位,所以要有一定的误差范围 ③要保存更新棋盘上的棋子信息,因为棋盘格数是固定的故本例中采取最简单的数组 直接上代码: 分为三个类,同一包下: package Study0326; public interface WZQConfig { /* * 起始位置X

  • 微信小程序实现五子棋游戏

    本文实例为大家分享了微信小程序实现五子棋游戏的具体代码,供大家参考,具体内容如下 效果图 .wxml <view class="title">   <view wx:if="{{currindex < 324 || defeat}}">   {{defeat?'胜出方:'+(outindex?'黑棋':'白棋'):'轮到了:'+(outindex?'白棋':'黑棋')}}   </view>   <view wx:el

  • 微信小程序实战之双人五子棋游戏是实现

    目录 一.项目展示 二.项目核心代码 三.效果展示 一.项目展示 微信小程序项目实例——双人五子棋 双人五子棋是一款游戏小程序 两位选手可以在15x15的棋盘上 进行五子棋竞技 同时小程序设置了悔棋功能 二.项目核心代码 点击落子 step: function(event) { var pos=event.currentTarget.dataset.pos; wx.setStorageSync('vak', this.data.vak); if(this.data.vak[pos]=="whit

  • java实现五子棋小游戏

    java实现五子棋小游戏 package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame extends JFrame { //定义一个操作面板 OperatorPane op=null; public GomokuFrame() { //设置名称 this.setTitle("五子棋"); //设置窗口大小 this.setSize(510,510); //设置窗

随机推荐