/*
项目名称:五子棋,
vs
*/
/*
绘图环境,初始化游戏
1、绘图环境(窗口)
2、背景图片
3、背景音乐
4、绘制棋盘
*/
#include"pch.h"
#include<graphics.h>//图形库头文件
#include<stdio.h>
#include<mmsyscom.h>//播放音乐需要用到的头文件
#pragma comment(lib,"winmm.lib")//播放音乐需要用的库文件
int flag = ;//记录轮到谁下棋
int board[][] = { };//0表示没有被占用
void initGame()
{
//自己创建一个窗口
initgraph(, );
//贴图片
loadimage(NULL, "背景.jpg");
/*IMAGE img;
loadimage(&img, "背景.jpg", 300, 250);
putimage(100, 100, &img);*/
mciSendString("open 特别.mp3", , , );//打开音乐文件
mciSendString("play 特别.mp3", , , );//播放音乐
//绘制棋盘,循环
setlinecolor(BLACK);
for (int i = ; i < ; i++)
{
line(i * , , i * , );
line(, i * , , i * );
}//在同一个地方绘制了19次
setlinestyle(PS_SOLID, );
line(, , , );
settextcolor(RED);
setbkmode();
outtextxy(, , "玩家1:黑棋");
outtextxy(, , "玩家2:白棋");
}
//下棋鼠标点击
void playChess()
{
MOUSEMSG m;
int a;
int b;
int x, y;
HWND hwnd;//窗口句柄,就是一个指针,
hwnd = GetHWnd();//窗口置前 while ()
{
m = GetMouseMsg();//获取鼠标消息
//绝对值
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (abs(m.x - i * ) < && abs(m.y - j * ) < )
{
a = i;//行列号
b = j;
x = i * ;//坐标
y = j * ; }
}
}
if (m.uMsg == WM_LBUTTONDOWN)//判断当前鼠标消息是不是鼠标左键按下
{
if (board[a][b] != )//有棋子
{
MessageBox(hwnd, "这里已有棋子了,请重新选择下棋点", "五子棋", MB_OK);
//推出循环
continue;
}
if (flag % == )
{
setfillcolor(BLACK);
solidcircle(m.x / * , m.y / * , );//交叉下棋,位置没有对齐
board[a][b] = ;
}
else
{
setfillcolor(WHITE);
solidcircle(m.x / * , m.y / * , );
board[a][b] = ;
}
flag++;//1 3 5 2 4 6
}
if (judgewin(a, b))//找到了五子棋
{
if(flag % == )
{
MessageBox(hwnd,"玩家1获胜","游戏结束",MB_OK);
exit();//退出程序
}
else
{
MessageBox(hwnd, "玩家2获胜","游戏结束",MB_OK);
exit();//退出程序
}
}
}
}
//判断输赢
int judgewin(int a, int b)
{
int i;
int j;
int t = - flag % ;
//横着方向的判断
for (i = a - , j = b; i < a; i++)
{
j = b;
if (i >= && i <= && t == board[i][j] && t == board[i + ][j] && t == board[i + ][j] && t == board[i + ][j] && t == board[i + ][j])
{
return ;
}
}
//竖着方向
for (i = a, j = b - ; j < b; j++)
{
if (j >= && j <= && t == board[i][j] && t == board[i][j + ] && t == board[i][j + ] && t == board[i][j + ] && t == board[i][j + ])
{
return ;
}
}
for (i = a - , j = b - ; i <= a, j <= b; i++, j++)
{
if (i >= && i <= && t == board[i][j] && t == board[i + ][j + ] && t == board[i + ][j + ] && t == board[i + ][j + ] && t == board[i + ][j + ])
{
return ;
}
}
for (i = a - , j = b + ; i <= a, j >= ; i++, j--)
{
if (i >= && i <= && t == board[i][j] && t == board[i + ][j - ] && t == board[i + ][j - ] && t == board[i + ][j - ] && t == board[i + ][j - ])
{
return ;
}
}
}
int main()
{
initGame();
playChess();
getchar();//防止闪退
return ;
}

我也没写过看教程的不过,其实也不是那么难。。。但是我出现了一个问题想请教一下

觉得自己没有做错可是。。。。。知道的可以告知一下吗谢谢

无聊看看c是咋写游戏的的更多相关文章

  1. 怎样成为一个游戏制作人——第五章:使用GGE图形库来写游戏

    怎样成为一个游戏制作人--第五章:使用GGE图形库来写游戏 前言: 细致想了一下,来看博客的一般都是有自学能力的了.C++基础多少也会有一些了. 于是决定以下的章节.会教大家做一些小游戏. 来巩固自己 ...

  2. 为什么不用C++写游戏(聪明的程序员不用C++折磨自己)(这些工作,QT都替开发者解决了,C++没有根类导致太多的问题,也没有字符串类)

    当今世界上绝大多数游戏都是C++写的,为什么要说不呢? 要做什么?写游戏. 写游戏首先要考虑些什么?做什么样的游戏,图形.音效.游戏逻辑如何实现. 用C++要先考虑什么?定义跨平台数据类型抽象,实现常 ...

  3. 无聊的周末用Java写个扫雷小游戏

    周末无聊,用Java写了一个扫雷程序,说起来,这个应该是在学校的时候,写会比较好玩,毕竟自己实现一个小游戏,还是比较好玩的.说实话,扫雷程序里面核心的东西,只有点击的时候,去触发更新数据这一步. Sw ...

  4. 2015/11/9用Python写游戏,pygame入门(8):按钮和游戏结束

    昨天没有更新内容,今天相对多写一些. 因为我们已经基本完成游戏框架,但是游戏结束后,并不知道怎样比较好开始.我本来本着懒的原则,想结束后显示一个黑屏,然后你重新点一下鼠标就重新开始.但是那样实在太不像 ...

  5. Axiom3D写游戏:第一个窗口

    Axiom主要的代码大致翻看了下,就想到了自己来模拟一下游戏开发. 这章主要包括创建窗口及3D渲染的一些基本元素,并添加一个第三人称的骨骼动画作主角,加上前文中修改过后的地形组件,能用鼠标和键盘进行漫 ...

  6. 2015/11/7用Python写游戏,pygame入门(7):碰撞检测

    我们已经完成了飞机大战的大部分东西,但是游戏还是没有办法正式开玩,因为子弹并不能打掉飞机.只有完成了这一个工作,游戏才算基本成型. 今天的内容就非常简单了,就是做到这个碰撞检测,以及控制好子弹和飞机的 ...

  7. 2015/11/6用Python写游戏,pygame入门(6):控制大量的对象

    昨天我们已经实现了这个游戏的三个基本类. 但是现在它还是没办法做成一个适合玩的游戏,毕竟只有一架敌机的游戏是很乏味的.所以,我们需要好多子弹,也需要好多敌机. 所以,我们要创建list,这个list存 ...

  8. 2015/11/5用Python写游戏,pygame入门(5):面向对象的游戏设计

    昨天的内容里有了运动的子弹,虽然我们只添加了一个子弹,但你可以看到我们需要记录子弹的x,y坐标,每次要更新它的坐标.如果我们想要有多颗子弹,就需要存储多个坐标.那时候处理起来就不显得那么简单,也许我们 ...

  9. 2015/11/4用Python写游戏,pygame入门(4):获取鼠标的位置及运动

    按昨天的说法,今天将开始做一个简单的游戏了. 目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了. 首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己制作,并没有 ...

随机推荐

  1. 「AHOI2014/JSOI2014」拼图

    「AHOI2014/JSOI2014」拼图 传送门 看到 \(n \times m \le 10^5\) ,考虑根号分治. 对于 \(n < m\) 的情况,我们可以枚举最终矩形的上下边界 \( ...

  2. 10 从DFS到DFT

    从DFS到DFT 周期序列的级数展开 正如连续时间周期信号可以表示为一系列正弦信号的和的形式,周期序列也可以表示为一系列正弦之和的形式,假设序列\(\tilde{x}[n]\)的周期为\(N\),那 ...

  3. 用IDEA创建项目时没有Spring类型的项目模板

    使用的版本:2019.2.2 Community 解决方法:File=>Setting=>Plugins=>搜索Spring,安装Spring Assistant=>重启IDE ...

  4. 吴裕雄--天生自然ORACLE数据库学习笔记:表分区与索引分区

    create table ware_retail_part --创建一个描述商品零售的数据表 ( id integer primary key,--销售编号 retail_date date,--销售 ...

  5. DAC

    DAC的功能:可以输出电压(无触发,设置DAC转换值,DAC使能更新寄存器和启动转换)或者波形(连续转换,用DMA发送数据,定时器触发).首先有个正弦波波形的数组,内存到DAC的DMA通道不断的将正弦 ...

  6. 收藏 40 2 CPD (广告合作方式)

    CPD,Cost per day的缩写,意思是按天收费,是一种广告合作方式. 在实际的广告合作中根据行业不同还包括Cost per Download的缩写含义,意思是依据实际下载量收费.   “CPD ...

  7. The way get information from mssql by using excel vba and special port

    Yes,  we can get information from mssql by using excel vba.  But the default port of MSSQL is  1433. ...

  8. virtual column make sqlserver using function index

    In sqlserver, it is impossible that if we want to create an function index. Doesn`t means we can not ...

  9. 学习Java的书籍资料

    对于程序员来说,编程技术至关重要,然而技术的提高不是一蹴而就的,它需要时间的积累和经验的沉淀.因此本文为大家推荐Java学习的书籍,学虽容易,学好不易,且学且珍惜. 基础类.<Java从入门到精 ...

  10. 设计模式课程 设计模式精讲 13-2 享元模式coding

    1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 每周由随机部门经历做报告: 重点关注: a 该案例是单例模式和享元模式共同使用 b 外部传入的department是外部状态 ...