![]() |
#2
邓士林2013-04-29 20:24
|

/***************************
* E-mail:dreamdev@ *
***************************/
/*
所用的知识全为最初级入门知识。
注意逻辑结构就可以完成:
一个逻辑核心(包括构建地图和处理逻辑信息)
一个显示界面功能
一个控制功能
界面不断读取核心来显示它,控制功能操控逻辑
它很像我用opengl,大多数图形SDK都是这个逻辑
*/
#include <iostream>
#include <string>
using namespace std;
char map[10][10];//我们的地图
string pmove;//控制操作用的
char players=1;//用于决定哪个玩家行动,初始化为空心笑脸
bool gamewin=false;//判断游戏是否胜利
string showmsg,showerror;//界面显示状态
int ix=0,iy=0;//它在每个函数内的作用都不一样,但函数在使用前会自己初始化
int gamen;//记录游戏有效次数,你不想都放满了游戏还在继续吧
void newgame();//新的游戏
void showmap();//绘画界面
void player();//玩家操控
void gamew();//游戏是否胜利,谁取得胜利
int main()
{
system("color 75");//只是缓解视觉疲劳,命令提示符中输入color ?可以得到该命令全部说明
while(1)
{
newgame();
while(!gamewin)
{
showmap();
if(!gamewin)player();
}
}
}
void newgame()//全部的初始化,新游戏只执行一次
{
ix=0;iy=0;
while(iy<10){
while(ix<10){
map[ix][iy]='+';
ix++;
}
iy++;
ix=0;
}
gamewin=false;
players=1;
gamen=0;
}
void showmap()//显示在屏幕上的东西
{
system("CLS");//系统内部函数,执行命令提示符输入命令,只是为了美观而清屏
cout<<"输入坐标请先输入数字然后输入字母,比如0a或者9j.\n"
"为什么只有9格?因为多了10以上格子和坐标编号对不齐,只是因为这样而已\n"<<endl;//先来段说明吧
char text='a';
ix=0;iy=0;
cout<<" "<<"0 1 2 3 4 5 6 7 8 9\n"<<endl;
while(iy<10){
cout<<text<<" ";
while(ix<10){
cout<<map[ix][iy]<<" ";
ix++;
}
cout<<endl;
iy++;
text++;
ix=0;
}
if(gamen<=80)
{
if(players==1)
showmsg=" 该空心笑脸行动";
else
showmsg=" 该实心笑脸行动";
cout<<"\n状态: "<<players<<showmsg<<" "<<showerror<<"\n\n请输入坐标:";
showerror="";
}
else
{
cout<<"\n这下只能平局了,回车后重新开始";
gamewin=true;
cin.get();cin.get();//输入缓冲的问题,用两个让它停下来
}
}
void player()
{
cin>>pmove;
ix=pmove[0]-48;iy=pmove[1]-97;//依次为横向数字,竖向字母。根据ASCII码减成0
if(ix>9||iy>9||iy<0||ix<0)//它不能防止乱输入,但可以防止内存泄漏
{showerror+=" 错误:坐标输入错误!";}
else
{
if(map[ix][iy]!='+')
{showerror+=" 错误:该位置上不可放置!";}
else
{
map[ix][iy]=players;//放置棋子
gamen++;//记录有效次数
gamew();//如果把检测单独做个模块,它就能添加AI
if(players==1)//如果能正常运行在地图上完成后记住交换玩家
players=2;
else
players=1;
}
}
}
void gamew()
{
int test=0;
for(int x=0;x<=9;x++){//注意这个循环只检查了竖行体系
for(int y=0;y<=9;y++){
if(map[x][y]==players)test++;//如果检测到棋子就+1
if(test>=5)gamewin=true;//如果连续的5个就胜利
if(map[x][y]!=players)test=0;//如果遇到断开的就归零
}
}
test=0;
for(int x=0;x<=9;x++){//横行体系 一模一样只是复制下
for(int y=0;y<=9;y++){
if(map[y][x]==players)test++;//交换一下下标就可以了
if(test>=5)gamewin=true;//如果连续的5个就胜利
if(map[y][x]!=players)test=0;//如果遇到断开的就归零
}
}
int mx=ix,my=iy;test=0;
while(mx<=9 && my>=0){//棋子点往上右
if(map[mx][my]==players)test++;
if(test>=5)gamewin=true;
if(map[mx][my]!=players)break;
mx++;my--;
}
mx=ix-1,my=iy+1;
while(mx>=0 && my<=9){//棋子点往下左
if(map[mx][my]==players)test++;
if(test>=5)gamewin=true;
if(map[mx][my]!=players)break;
mx--;my++;
}
mx=ix,my=iy;test=0;
while(mx>=0 && my>=0){//棋子点往上左
if(map[mx][my]==players)test++;
if(test>=5)gamewin=true;
if(map[mx][my]!=players)break;
mx--;my--;
}
mx=ix+1,my=iy+1;
while(mx<=9 && my<=9){//棋子点往下右
if(map[mx][my]==players)test++;
if(test>=5)gamewin=true;
if(map[mx][my]!=players)break;
mx++;my++;
}
if(gamewin==true){
showmap();//一般前面是先绘制再控制,这里得到胜利条件就不绘制了,所以绘制一下
if(players==1)
cout<<players<<players<<players<<"空心笑脸玩家胜利啦"<<players<<players<<players;
else
cout<<players<<players<<players<<"实心笑脸玩家胜利啦"<<players<<players<<players;
cin.get();cin.get();
}
}
* E-mail:dreamdev@ *
***************************/
/*
所用的知识全为最初级入门知识。
注意逻辑结构就可以完成:
一个逻辑核心(包括构建地图和处理逻辑信息)
一个显示界面功能
一个控制功能
界面不断读取核心来显示它,控制功能操控逻辑
它很像我用opengl,大多数图形SDK都是这个逻辑
*/
#include <iostream>
#include <string>
using namespace std;
char map[10][10];//我们的地图
string pmove;//控制操作用的
char players=1;//用于决定哪个玩家行动,初始化为空心笑脸
bool gamewin=false;//判断游戏是否胜利
string showmsg,showerror;//界面显示状态
int ix=0,iy=0;//它在每个函数内的作用都不一样,但函数在使用前会自己初始化
int gamen;//记录游戏有效次数,你不想都放满了游戏还在继续吧
void newgame();//新的游戏
void showmap();//绘画界面
void player();//玩家操控
void gamew();//游戏是否胜利,谁取得胜利
int main()
{
system("color 75");//只是缓解视觉疲劳,命令提示符中输入color ?可以得到该命令全部说明
while(1)
{
newgame();
while(!gamewin)
{
showmap();
if(!gamewin)player();
}
}
}
void newgame()//全部的初始化,新游戏只执行一次
{
ix=0;iy=0;
while(iy<10){
while(ix<10){
map[ix][iy]='+';
ix++;
}
iy++;
ix=0;
}
gamewin=false;
players=1;
gamen=0;
}
void showmap()//显示在屏幕上的东西
{
system("CLS");//系统内部函数,执行命令提示符输入命令,只是为了美观而清屏
cout<<"输入坐标请先输入数字然后输入字母,比如0a或者9j.\n"
"为什么只有9格?因为多了10以上格子和坐标编号对不齐,只是因为这样而已\n"<<endl;//先来段说明吧
char text='a';
ix=0;iy=0;
cout<<" "<<"0 1 2 3 4 5 6 7 8 9\n"<<endl;
while(iy<10){
cout<<text<<" ";
while(ix<10){
cout<<map[ix][iy]<<" ";
ix++;
}
cout<<endl;
iy++;
text++;
ix=0;
}
if(gamen<=80)
{
if(players==1)
showmsg=" 该空心笑脸行动";
else
showmsg=" 该实心笑脸行动";
cout<<"\n状态: "<<players<<showmsg<<" "<<showerror<<"\n\n请输入坐标:";
showerror="";
}
else
{
cout<<"\n这下只能平局了,回车后重新开始";
gamewin=true;
cin.get();cin.get();//输入缓冲的问题,用两个让它停下来
}
}
void player()
{
cin>>pmove;
ix=pmove[0]-48;iy=pmove[1]-97;//依次为横向数字,竖向字母。根据ASCII码减成0
if(ix>9||iy>9||iy<0||ix<0)//它不能防止乱输入,但可以防止内存泄漏
{showerror+=" 错误:坐标输入错误!";}
else
{
if(map[ix][iy]!='+')
{showerror+=" 错误:该位置上不可放置!";}
else
{
map[ix][iy]=players;//放置棋子
gamen++;//记录有效次数
gamew();//如果把检测单独做个模块,它就能添加AI
if(players==1)//如果能正常运行在地图上完成后记住交换玩家
players=2;
else
players=1;
}
}
}
void gamew()
{
int test=0;
for(int x=0;x<=9;x++){//注意这个循环只检查了竖行体系
for(int y=0;y<=9;y++){
if(map[x][y]==players)test++;//如果检测到棋子就+1
if(test>=5)gamewin=true;//如果连续的5个就胜利
if(map[x][y]!=players)test=0;//如果遇到断开的就归零
}
}
test=0;
for(int x=0;x<=9;x++){//横行体系 一模一样只是复制下
for(int y=0;y<=9;y++){
if(map[y][x]==players)test++;//交换一下下标就可以了
if(test>=5)gamewin=true;//如果连续的5个就胜利
if(map[y][x]!=players)test=0;//如果遇到断开的就归零
}
}
int mx=ix,my=iy;test=0;
while(mx<=9 && my>=0){//棋子点往上右
if(map[mx][my]==players)test++;
if(test>=5)gamewin=true;
if(map[mx][my]!=players)break;
mx++;my--;
}
mx=ix-1,my=iy+1;
while(mx>=0 && my<=9){//棋子点往下左
if(map[mx][my]==players)test++;
if(test>=5)gamewin=true;
if(map[mx][my]!=players)break;
mx--;my++;
}
mx=ix,my=iy;test=0;
while(mx>=0 && my>=0){//棋子点往上左
if(map[mx][my]==players)test++;
if(test>=5)gamewin=true;
if(map[mx][my]!=players)break;
mx--;my--;
}
mx=ix+1,my=iy+1;
while(mx<=9 && my<=9){//棋子点往下右
if(map[mx][my]==players)test++;
if(test>=5)gamewin=true;
if(map[mx][my]!=players)break;
mx++;my++;
}
if(gamewin==true){
showmap();//一般前面是先绘制再控制,这里得到胜利条件就不绘制了,所以绘制一下
if(players==1)
cout<<players<<players<<players<<"空心笑脸玩家胜利啦"<<players<<players<<players;
else
cout<<players<<players<<players<<"实心笑脸玩家胜利啦"<<players<<players<<players;
cin.get();cin.get();
}
}