| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 630 人关注过本帖, 1 人收藏
标题:写了一个代码,命令提示符版五子棋。只是提供学习的
只看楼主 加入收藏
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
结帖率:83.33%
收藏(1)
 问题点数:0 回复次数:4 
写了一个代码,命令提示符版五子棋。只是提供学习的
提供个新人学习和鼓励用的。
程序代码:
/***************************

 * 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();
     }
}



 
搜索更多相关主题的帖子: color 知识 
2013-04-29 19:40
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
不错,继续努力

Maybe
2013-04-29 20:24
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
我什么时候可以写出这种代码啊,哎。。

练就一身本领,只为笑傲江湖!
2013-04-29 23:31
X18649806681
Rank: 2
等 级:论坛游民
帖 子:18
专家分:37
注 册:2013-4-22
收藏
得分:0 
羡慕

To be is to do.
2013-04-30 11:42
不要脸的猫
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:41
专家分:126
注 册:2012-6-20
收藏
得分:0 
厉害!

埋骨何须桑梓地,人生无处不青山
2013-04-30 22:22
快速回复:写了一个代码,命令提示符版五子棋。只是提供学习的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.138674 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved