无聊看看c是咋写游戏的
/*
项目名称:五子棋,
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是咋写游戏的的更多相关文章
- 怎样成为一个游戏制作人——第五章:使用GGE图形库来写游戏
怎样成为一个游戏制作人--第五章:使用GGE图形库来写游戏 前言: 细致想了一下,来看博客的一般都是有自学能力的了.C++基础多少也会有一些了. 于是决定以下的章节.会教大家做一些小游戏. 来巩固自己 ...
- 为什么不用C++写游戏(聪明的程序员不用C++折磨自己)(这些工作,QT都替开发者解决了,C++没有根类导致太多的问题,也没有字符串类)
当今世界上绝大多数游戏都是C++写的,为什么要说不呢? 要做什么?写游戏. 写游戏首先要考虑些什么?做什么样的游戏,图形.音效.游戏逻辑如何实现. 用C++要先考虑什么?定义跨平台数据类型抽象,实现常 ...
- 无聊的周末用Java写个扫雷小游戏
周末无聊,用Java写了一个扫雷程序,说起来,这个应该是在学校的时候,写会比较好玩,毕竟自己实现一个小游戏,还是比较好玩的.说实话,扫雷程序里面核心的东西,只有点击的时候,去触发更新数据这一步. Sw ...
- 2015/11/9用Python写游戏,pygame入门(8):按钮和游戏结束
昨天没有更新内容,今天相对多写一些. 因为我们已经基本完成游戏框架,但是游戏结束后,并不知道怎样比较好开始.我本来本着懒的原则,想结束后显示一个黑屏,然后你重新点一下鼠标就重新开始.但是那样实在太不像 ...
- Axiom3D写游戏:第一个窗口
Axiom主要的代码大致翻看了下,就想到了自己来模拟一下游戏开发. 这章主要包括创建窗口及3D渲染的一些基本元素,并添加一个第三人称的骨骼动画作主角,加上前文中修改过后的地形组件,能用鼠标和键盘进行漫 ...
- 2015/11/7用Python写游戏,pygame入门(7):碰撞检测
我们已经完成了飞机大战的大部分东西,但是游戏还是没有办法正式开玩,因为子弹并不能打掉飞机.只有完成了这一个工作,游戏才算基本成型. 今天的内容就非常简单了,就是做到这个碰撞检测,以及控制好子弹和飞机的 ...
- 2015/11/6用Python写游戏,pygame入门(6):控制大量的对象
昨天我们已经实现了这个游戏的三个基本类. 但是现在它还是没办法做成一个适合玩的游戏,毕竟只有一架敌机的游戏是很乏味的.所以,我们需要好多子弹,也需要好多敌机. 所以,我们要创建list,这个list存 ...
- 2015/11/5用Python写游戏,pygame入门(5):面向对象的游戏设计
昨天的内容里有了运动的子弹,虽然我们只添加了一个子弹,但你可以看到我们需要记录子弹的x,y坐标,每次要更新它的坐标.如果我们想要有多颗子弹,就需要存储多个坐标.那时候处理起来就不显得那么简单,也许我们 ...
- 2015/11/4用Python写游戏,pygame入门(4):获取鼠标的位置及运动
按昨天的说法,今天将开始做一个简单的游戏了. 目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了. 首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己制作,并没有 ...
随机推荐
- 【NGINX】LINUX安装NGINX
安装依赖() · yum install gcc · yum install pcre-devel · yum install zlib zlib-devel · yum install openss ...
- [idea] 解决 idea 复制进项目的文件运行时无法找到的问题
解决方法一: Rebuild后,重启项目 解决方法二:
- 使用pandas读取excel
使用pandas读取excel Excel是微软的经典之作,在这里我们介绍使用Python的pandas数据分析包来解决此问题. pd.read_excel(io, sheet_name = 0, h ...
- lua叠代器
注意:叠待值遇到nil就退出 叠代器,是符合for遍历框架,需要满足条件 1-叠代函数,常量,控制变量 2-叠代函数可以接受二个参数,当然也可以忽略处理(利用闭包封装参数作为控制变量和状态变量) 无状 ...
- 2019 深信服 下棋(DFS+回溯)
链接:https://www.nowcoder.com/questionTerminal/a0feb0696e2043a5b3b0779fa861b64a?f=discussion来源:牛客网 8x8 ...
- 使用IDEA查看数据库
emm...今天捣鼓了一下IDEA意外发现(原谅我后知后觉)不用Navicat也能查看数据库中的表,虽然可视化不如Navicat,但毕竟Navicat要钱,一些朋友也没有资源 = =,所以就记录并分享 ...
- 聚合数据实名认证接口-java方法
只需要填入购买的APPKEY,然后直接调用方法JuheDemo.info(user_name, anchor_card);传入姓名和身份证号,根据获取的返回参数进行拆分,如res=1说明正确. //进 ...
- 时间戳转分秒 | 字符串的padStart()和padEnd()
function _pad(num, n = 2) { let len = num.toString().length while (len < n) { num = '0' + num len ...
- Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战
Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...
- 3.Sprint 代理对象与原始对象的异常错误
代码案例分析 Service层添加了注解@Transactional @Service @Transactional public class CustomerService extends Base ...