| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1532 人关注过本帖
标题:一个两人玩的五子棋游戏
只看楼主 加入收藏
xzghyd
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-3-29
收藏
 问题点数:0 回复次数:9 
一个两人玩的五子棋游戏
#include<iostream>
#include <conio.h>
using namespace std;

const int size=19;

void form(char data[][size]);               //棋盘生成函数
void putin(char data[size][size]);          //输入函数
int work(char data[size][size],int row,int col,int player,int *p);   //基本判断函数

int main()
{
    char data[size][size];
    int index;
 
    for(index=0;index<size*size;index++)
     *(*data+index)=' ';                    //棋盘初始化为空

    form(data);                             //打印棋盘
    putin(data);

    return 0;
}
void form(char data[][size])
{
    int row,col,index;
 
    cout<<"  ";
    for(index=0;index<size;index++)
    cout<<" "<<char(index+97)<<" ";
    cout<<endl;

    for(index=0;index<size;index++)
    {
        cout<<"  ";

        for(row=0;row<size;row++)
        cout<<"+--";

        cout<<"+"<<endl;                     //输出+--+--+--+--+--+--+--+--+
   
        cout<<char(index+97)<<" ";           

        for(col=0;col<size;col++)
        cout<<"| "<<data[index][col];

        cout<<"|"<<endl;                     //输出|  |  |  |  |  |  |  |  |
    }

        cout<<"  ";
        for(row=0;row<size;row++)
        cout<<"+--";

        cout<<"+"<<endl;
 }

void putin(char data[size][size])
{
    int row,col,number1=0,number2=0;     //number为游戏是否结束的标志
    char cw,cl;
    int UU1=0;
 
    while(1)
    {
        number1=1;
        cout<<"player1 put in @"<<endl;    //player1的输入属性
        cin>>cw>>cl;
        row=cw-97;col=cl-97;
        data[row][col]='@';

        if(work(data,row,col,1,&number1))
        {
            UU1=1;
            break;
        }
        system("cls");
        form(data);

        number2=1;
        cout<<"player2 put in &"<<endl;   //player2的输入属性
        cin>>cw>>cl;
        row=cw-97;col=cl-97;
        data[row][col]='&';

        if(work(data,row,col,2,&number2))
            break;
         
        system("cls");
        form(data);
    }

     system("cls");

     form(data);
     cout<<"GAME OVER"<<endl;

     if(UU1)
         cout<<"player1 胜利"<<endl;
     else
         cout<<"player2 胜利"<<endl;
}

int work(char data[size][size],const int row,const int col,int player,int *p)
{
    int i,j;
    char bj;

    if(player==1)bj='@';
    else bj='&';

 //垂直
    i=row-1;    //上            
    while(i>=0 && data[i][col]==bj)
    {
        (*p)++;i--;
    }

    i=row+1;    //下
    while(i<size && data[i][col]==bj)
    {
        (*p)++;i++;
    }

    if((*p)==5)
        return 1;
    else
        *p=1;

 //水平
    j=col+1;   //左
     while(j<size && data[row][j]==bj)
     {
         (*p)++;
         j++;
     }

     j=col-1;   //右

     while(j>=0 && data[row][j]==bj)
     {
         (*p)++;
         j--;
     }
     if((*p)==5)
         return 1;
     else
         *p=1;

   //右斜
    i=row-1;j=col+1;  //右上
    while(i>=0 && j<size && data[i][j]==bj)
    {
        (*p)++;
        i--;
        j++;
    }

    i=row+1;j=col-1;  //左下
    while(i<size && j>=0 && data[i][j]==bj)
    {(*p)++;
    i++;
    j--;
    }

    if((*p)==5)
        return 1;
    else
        *p=1;

    //左斜
    i=row-1;j=col-1;   //左上
     while(i>=0 && j>=0 && data[i][j]==bj)
     {
         (*p)++;
         i--;
         j--;
     }

     i=row+1;j=col+1;   //右下
     while(i<size && j<size && data[i][j]==bj)
     {
         (*p)++;
         i++;
         j++;
     }

     if((*p)==5)
         return 1;
     else
         *p=1;

      return 0;
}

大家给评价一下啊,不要打击我啊,我是菜鸟
搜索更多相关主题的帖子: 五子棋 游戏 
2008-09-28 01:50
xzghyd
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-3-29
收藏
得分:0 
size 好象太大了,呵呵,不好意思啊
2008-09-28 01:51
xzghyd
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-3-29
收藏
得分:0 
由于本人还不会五子棋的算法,所以还没有加电脑IQ,还希望大家多指点一下迷津,谢谢啊
2008-09-28 01:59
xmnathan
Rank: 2
等 级:论坛游民
威 望:1
帖 子:73
专家分:10
注 册:2008-8-30
收藏
得分:0 
我自己也做了个五子棋游戏,不过用的win32项目,不是控制台的,还没贴图呢。
电脑AI太麻烦了,也没做,呵呵
基本逻辑就是用一个二维数组step[15][15]记录棋盘上每个位置的状态,每下一步先判断这格是否已经下过了,然后判断横竖撇捺是否已经五子连,
设一个结构体{x,y}定义数组记录每步下的位置,这样可以设置悔棋,一个数记录下到第几步,判断是否棋盘已满造成和棋之类。

可以把棋盘初始化作为一个函数便于调用,这样可以设置重新开始选项。
菜鸟,too~呵呵
2008-09-28 14:29
xzghyd
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-3-29
收藏
得分:0 
电脑IQ需要怎么判断下子的位置呢
2008-09-28 21:59
r3215407
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2008-9-17
收藏
得分:0 
是啊
电脑IQ怎么弄
2008-09-29 16:09
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
收藏
得分:0 
我还以为是网络对战模式的呢?本想把我做的这个的源码发上来,可惜重装系统时忘了备份了,源码丢了。。。
https://bbs.bccn.net/viewthread.php?tid=226676&highlight=

2008-09-30 20:48
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
写这个关键就是设计AI,否则,就没有什么意思了...

2008-09-30 21:53
lihe
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-9-15
收藏
得分:0 
学习学习
2008-10-04 21:45
jiarujian
Rank: 1
来 自:吉林延吉
等 级:新手上路
帖 子:39
专家分:0
注 册:2008-9-22
收藏
得分:0 
厉害
2008-10-05 01:30
快速回复:一个两人玩的五子棋游戏
数据加载中...
 
   



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

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