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

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-20 12:50
快速回复:简易版五子棋~~
数据加载中...
 
   



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

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