无聊看看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):获取鼠标的位置及运动
按昨天的说法,今天将开始做一个简单的游戏了. 目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了. 首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己制作,并没有 ...
随机推荐
- 理解js中的原型链
对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性. 关于原型 在JavaScript中,原型也是一个对象,通过原型可以实现对象的属性继承 ...
- Invalid or unexpected token:数据格式错误
一个查询页面突然出现如下这个错误: Uncaught SyntaxError: Invalid or unexpected token, 翻译成中文是: 捕获的查询无效或意外的标记. 既然代码逻辑没问 ...
- 人物 - 安迪·葛洛夫,Andrew Stephen Grove,Andy Grove
安德鲁·史蒂芬·格罗夫英语:Andrew Stephen Grove,昵称安迪·格罗夫(Andy Grove) 1. 前Intel的CEO 2. 1985 年将英特尔带入计算机处理器市场,帮助Inte ...
- 怎么修改Anaconda 中 jupyter notebook 文件的保存位置
安装完 anaconda ,在jupyter notebook 中创建的文件的默认保存位置为C:\User\电脑名 修改保存位置 1.打开 anaconda prompt 2.输入 jupyter n ...
- nginx 与上游服务器建立连接的相关设置
向上游服务建立联系 Syntax: proxy_connect_timeout time; #设置TCP三次握手超时时间,默认60秒:默认超时后报502错误 Default: proxy_connec ...
- 用C/C++创建windows服务程序
转载:https://blog.csdn.net/chenyujing1234/article/details/8023816 一.演示过程下方代码演示了如何使用vs(C/C++)创建windows服 ...
- 【PAT甲级】1025 PAT Ranking (25 分)(结构体排序,MAP<string,int>映射)
题意: 输入一个正整数N(N<=100),表示接下来有N组数据.每组数据先输入一个正整数M(M<=300),表示有300名考生,接下来M行每行输入一个考生的ID和分数,ID由13位整数组成 ...
- MPAndroidChart柱子上的文字的颜色dataSet.setValueTextColors
版本:MPAndroidChart v3.1.0 这是个很强大的图表,不同的版本对应的API会不一样. 需求描述: 用了柱状图,但要实现这样的功能,通过不同的门店来区分不同的柱子的颜色,并且柱子上文字 ...
- Android学习笔记17:单项选择RadioButton和多项选择CheckBox的使用
请参见 http://www.android100.org/html/201406/05/19495.html
- JS操作网页中的iframe
/* *parent.html */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...