| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4096 人关注过本帖, 1 人收藏
标题:简易版五子棋~~
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏(1)
已结贴  问题点数:100 回复次数:16 
简易版五子棋~~
简单说明~鼠标控制单击左键执行黑子~单击右键执行白子~
由于初学绘图~这代码是参考网上课程的~还有很多不完善的地方~仅供参考~
注意~文件后缀是.cpp格式~~~~

程序代码:
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define N 28
void PlayGame();
int GameOver1(int chess[N][N],int flag);
void BackGround()
{
    IMAGE GameBackground;

/*    loadimage(&GameBackground,"GameBackground.jpg");

    int width=GameBackground.getwidth();
    int height=GameBackground.getheight();

    initgraph(width,height);
    putimage(0,0,&GameBackground);*/

    setlinecolor(BLACK);

    for (int i=20;i<=540;i+=20)
    {
        line(20,i,540,i);
        line(i,20,i,540);
    }

    setfillcolor(BLACK);

    fillcircle(100,280,2);
    fillcircle(280,100,2);

    fillcircle(460,100,2);
    fillcircle(100,460,2);

    fillcircle(460,460,2);
    fillcircle(100,100,2);

    fillcircle(460,280,2);
    fillcircle(280,460,2);

    fillcircle(280,280,2);
}
void messagebox()
{
    setlinecolor(BLACK);
    setfillcolor(RGB(255,201,14));
    fillrectangle(540,20,720,190);//左上角和右下角参数,确定一个矩形
    settextstyle(50,28,"黑体");    //画提示框里面的内容
    setbkmode(TRANSPARENT);//字体不背景透明处理

    setlinecolor(BLACK);
    settextcolor(BLACK);
    outtextxy(550,50,"黑棋");
    setfillcolor(BLACK);
    fillcircle(680,75,15);

    setlinecolor(WHITE);
    settextcolor(WHITE);
    outtextxy(550,110,"白棋");
    setfillcolor(WHITE);
    fillcircle(680,135,15);

    PlayGame();

    getchar();
    getchar();

}
void PlayGame()
{
    //鼠标
    int x,y,i,j;

    int chess[N][N]={0};

    MOUSEMSG m;
    while (1)
    {
        m=GetMouseMsg();
        switch(m.uMsg)
        {
            case WM_LBUTTONDOWN:

                if (m.x>=20&&m.x<=540&&m.y>=20&&m.y<=540)
                {
                    x=m.x%20;
                    if (x<=10)
                        m.x=m.x-x;
                    else
                        m.x=m.x-x+20;

                    y=m.y%20;
                    if (y<=10)
                        m.y=m.y-y;
                    else
                        m.y=m.y-y+20;

                    i=m.x/20;
                    j=m.y/20;
                    if (chess[i][j]!=0)
                        continue;

                    setlinecolor(BLACK);
                    setfillcolor(BLACK);
                    fillcircle(m.x,m.y,8);
                    chess[i][j]=1;

                    if (GameOver1(chess,1)==1)
                    {
                        settextcolor(RED);
                        settextstyle(50,50,"黑体");
                        outtextxy(100,200,"这局黑棋胜利");
                    }
                }
                break;

              case WM_RBUTTONDOWN:

                if (m.x>=20&&m.x<=550&&m.y>=20&&m.y<=550)
                {
                    x=m.x%20;
                    if (x<=10)
                        m.x=m.x-x;
                    else
                        m.x=m.x-x+20;

                    y=m.y%20;
                    if (y<=10)
                        m.y=m.y-y;
                    else
                        m.y=m.y-y+20;

                    i=m.x/20;
                    j=m.y/20;
                    if (chess[i][j]!=0)
                        continue;

                    setlinecolor(WHITE);
                    setfillcolor(WHITE);
                    fillcircle(m.x,m.y,8);

                    chess[i][j]=2;
                    if (GameOver1(chess,2)==1)
                    {
                        settextcolor(WHITE);
                        settextstyle(50,50,"黑体");
                        outtextxy(100,200,"这局白棋胜利");
                    }
                }
                break;
        }
    }
}
int GameOver1(int chess[N][N],int flag)
{
    int i,j,k,low,row,tilt1,tilt2;
    for (i=0;i<N;i++)
    {
        for (k=0;k<N-4;k++)
        {
            low=row=tilt1=tilt2=0;
            for (j=k;j<k+5;j++)
            {
                if (chess[i][j]==flag)
                    low++;
                if (chess[j][i]==flag)
                    row++;
                if (chess[i+(j-k)][j]==flag)
                    tilt1++;
                if (chess[i+4-(j-k)][j]==flag)
                    tilt2++;
            }
            if (low==5||row==5||tilt1==5||tilt2==5)
                return 1;
        }
    }

    return 0;
}
int main()
{
    initgraph(750,560);
    
    setbkcolor(RGB(255,100,0));
    cleardevice();

    BackGround();
    messagebox();

    getch();
    closegraph();

    return 0;
}
搜索更多相关主题的帖子: 五子棋 课程 网上 
2017-02-25 01:05
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
这个代码优化的空间很大~有时间九九去优化一下代码写写注释~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-25 01:08
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:25 
无图无真相啊!题主从哪找到的graphics.h,貌似以往我一看到这个就认定是dos模式下的tc或bc代码,除此之外的编译器是无法编译成功的。
由于早期用VB写过这代码,自觉还有些发言权。总的来看,由于不需要让子、悔棋等功能,这个代码已经很紧凑了,可优化的不多,我能想到的优化部分有两处:
1、9个画星位语句可用一个循环完成,缩短为两行代码
2、根据鼠标点击坐标位置画棋子可融合为一个if内完成,大概可减少20行代码

[此贴子已经被作者于2017-2-25 09:26编辑过]

2017-02-25 09:24
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:25 
我想问个,这个游戏是人机对战还是人人对战的呢?
有关于机器自动下棋的好方法吗?例如如何智能地下棋子,只能地猜想如何下为最优那些,谢谢。
2017-02-25 09:50
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 4楼 kin3z
简易版的当然是人人对弈~人机对弈的怎么都没有这么少代码吧~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-25 12:57
姚萌萌
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:40
专家分:55
注 册:2016-12-25
收藏
得分:25 
回复 楼主 九转星河
这个graphics.h是哪的呢?除了TC其他的也可以运行吗?我用DEV的话会显示头文件有错误,该如何改正呢
2017-02-25 14:15
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:0 
回复 6楼 姚萌萌
问万能的百毒君啊。。。把头文件复制粘贴就搜索到了。
2017-02-25 15:04
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:0 
回复 5楼 九转星河
呵呵,我也一时兴起做了个,就是不知道如何构思那个自动下棋的概念,所以中途报废了
2017-02-25 15:06
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
与上楼一并回复~opencv通过视频教学我vc6也能安装成功那个比安装一个EasyX还要麻烦~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-25 16:35
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:25 
很不错,又学到一招
2017-02-25 23:15
快速回复:简易版五子棋~~
数据加载中...
 
   



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

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