求C++版 米字棋或五字棋 程序 本人有C,VB的大家可以 发邮件给我 交流一下

bigbigwind8 2006-03-06 10:53:31
米字棋或五字棋 本人已经做了C,VB的现在想看看C++的怎么样。
希望大家有兴趣的可以提供给我。
有要C,VB班的同学请邮件联系。bigbigwind9@yahoo.com.cn
下面是题目:
决赛试题(二)
编制一个米字棋游戏程序。
棋盘为米字形,共有9个落子点,如图1所示:

图1 空白棋盘
黑方和白方各执3个子,在米字形棋盘上对弈。初始布局如图2所示:

图2 初始布局 图3 黑方胜出
黑棋为先手,双方轮流执步,不得空步。
行棋时,行棋方选择一颗棋子,向邻近的空白落子点前进一步。
双方轮流执步,直到其中一方的三颗棋子全部落在对角线上,则这一方胜出,如图3所示。

1. 基本要求:
编制一个“人—人”对弈的米字棋游戏程序。
2. 提高要求:
有能力的参赛者可向以下几个方向努力:
① 实现“人—机”对弈;
② 采用六局决胜制,每次交换黑、白方;
③ 设置难度级别,每一级别采取不同的博弈算法;
...全文
180 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbigwind8 2006-03-08
  • 打赏
  • 举报
回复
感谢
bigbigwind8 2006-03-08
  • 打赏
  • 举报
回复
其实想用C++主要想用 类的概念去完成这个程序的
bohlee 2006-03-07
  • 打赏
  • 举报
回复
有时间可以给你写一个
Squall1009 2006-03-07
  • 打赏
  • 举报
回复
-------------------------------five.cpp------------------------
#include <iostream>
using namespace std;
#include "five.h"

int main()
{
char player1[128];
cout << "请输入第一个选手的名字:";
cin.getline(player1,128);

Player play1(player1,1);

char player2[128];
cout << "请输入第二个选手的名字:";
cin.getline(player2,128);

Player play2(player2,-1);

Race race(&play1, &play2);
race.start();
system("pause");
return 0;
}





界面实在太惨了.............................
Squall1009 2006-03-07
  • 打赏
  • 举报
回复
以前帮别人交作业写的.

---------------------five.h-------------------------
#include <iostream>
#include <string>
using namespace std;
#include <stdio.h>

class Player
{
public:
Player(char * playerName, char flag)
{
this -> playerName = new char[strlen(playerName) + 1];
strncpy(this -> playerName, playerName, strlen(playerName) + 1);
this -> flag = flag;
}

char * getPlayerName()
{
return this -> playerName;
}

char getFlag()
{
return this -> flag;
}

~Player()
{
delete [] this -> playerName;
}
private:
char * playerName;
char flag;
};

class Race
{
public:
Race(Player * player1, Player * player2):player1(player1),player2(player2),nowPlayer(player1)
{
for(int i = 0; i < 20; ++i)
for(int j = 0; j < 20; ++j)
map[i][j] = 0;
}

int step(int m, int n)
{
if(map[m-1][n-1] != 0)
{
cout << "该位置已经有棋子了!" << endl;
cout << "请重新输入:";
return -1;
}
map[m-1][n-1] = nowPlayer -> getFlag();
return 0;
}

void showInfo()
{
cout << "轮到了 " << nowPlayer -> getPlayerName() << "\n";
cout << "输入格式为: 左括号 + 行号 + 逗号 + 列号 + 右括号\n如(01,A) :" ;
}

int isWin()
{
Player * play = this -> nowPlayer;
for(int i = 0; i < 20; ++i)
for(int j = 0; j < 20; ++j)
{
if(map[i][j] == play -> getFlag())
{
if(i < 16)
{
if(map[i+1][j] == play -> getFlag() && map[i+2][j] == play -> getFlag()
&& map[i+3][j] == play -> getFlag() && map[i+4][j] == play -> getFlag())
return 1;
}
if(j < 16)
{
if(map[i][j+1] == play -> getFlag() && map[i][j+2] == play -> getFlag()
&& map[i][j+3] == play -> getFlag() && map[i][j+4] == play -> getFlag())
return 1;
}
if(i > 3 && j < 16)
{
if(map[i-1][j+1] == play -> getFlag() && map[i-2][j+2] == play -> getFlag()
&& map[i-3][j+3] == play -> getFlag() && map[i-4][j+4] == play -> getFlag())
return 1;
}
if(i < 16 && j < 16)
{
if(map[i+1][j+1] == play -> getFlag() && map[i+2][j+2] == play -> getFlag()
&& map[i+3][j+3] == play -> getFlag() && map[i+4][j+4] == play -> getFlag())
return 1;
}
}
}
return 0;
}

Player * getPlayer1()
{
return this -> player1;
}

Player * getPlayer2()
{
return this -> player2;
}

int getInput(int & m, int & n)
{
char buff[256];
memset(buff, 0, 256);
cin.getline(buff,256);
if(buff[0] != '(')
{
cout << "输入格式出错!" << endl;
cout << "请重新输入:";
return -1;
}
if(buff[strlen(buff)-1] != ')')
{
cout << "输入格式出错!" << endl;
cout << "请重新输入:";
return -1;
}
for(int i = 0 ; i < strlen(buff); ++i)
{
if(buff[i] == ',')
break;
if(i == (strlen(buff) -1))
{
cout << "输入格式出错!" << endl;
cout << "请重新输入:";
return -1;
}
}
char str1[128];
memset(str1, 0, 128);
char str2[128];
memset(str2, 0, 128);

sscanf(buff,"(%2s,%1s)",str1,str2);
if(strlen(str1) != 1 && strlen(str1) != 2)
{
cout << "输入格式出错!" << endl;
cout << "请重新输入:";
return -1;
}
if(strlen(str2) != 1)
{
cout << "输入格式出错!" << endl;
cout << "请重新输入:";
return -1;
}
m = atoi(str1);
if(m < 1 || m > 20)
{
cout << "输入格式出错!" << endl;
cout << "请重新输入:";
return -1;
}
n = str2[0] - 'A' + 1;
if(m < 1 || m > 20)
{
cout << "输入格式出错!" << endl;
cout << "请重新输入:";
return -1;
}
return 0;
}

void print()
{
cout << " " << (this -> player1) -> getPlayerName() << " VS " << (this -> player2) -> getPlayerName() << "\n";
cout << " A B C D E F G H I J K L M N O P Q R S T\n";
for(int i = 0; i < 20; ++i)
{
char col[3];
sprintf(col,"%02d",i+1);
cout << col;
for(int j = 0; j < 20; ++j)
{
if(map[i][j] == 0)
cout << "无";
if(map[i][j] == player1 -> getFlag())
cout << "黑";
if(map[i][j] == player2 -> getFlag())
cout << "白";
}
if(i < 19)
cout << "\n";
else
cout << endl;
}
}

void start()
{
int m = 1;
int n = 1;
while(1)
{
int m = 0;
int n = 0;
int p = 1;
int q = 1;
this -> print();
this -> showInfo();
do{
do{
p = this -> getInput(m,n);
}while(p != 0);
q = this -> step(m, n);
}while(q != 0);
int i = isWin();
if(i == 1)
{
this -> print();
cout << "胜利者是:%s" << this -> nowPlayer -> getPlayerName() << endl;
return;
}
if(nowPlayer == player1)
{
nowPlayer = player2;
continue;
}
if(nowPlayer == player2)
{
nowPlayer = player1;
continue;
}
}
}
private:
Player * player1;
Player * player2;
Player * nowPlayer;
char map[20][20];
};

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧