/*
项目名称:五子棋,
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. Python 基础之面向对象之八步理解装饰器

    装饰器:在不改变原有代码的情况下,为该原函数扩展新功能特征:返回新函数,替换旧函数语法:@ 语法糖 1.装饰器原型 #例1: def kuozhan(func):    def newfunc():  ...

  2. MySQL - 在Ubuntu下密码初始化

    1. 打开/etc/mysql/debian.cnf文件,在这个文件中有系统默认给我们分配的用户名和密码,通过这个密码就可以直接对MySQL进行操作了. 2. 以debian-sys-maint为用户 ...

  3. python nohup linux 后台运行输出

    遇到问题 nohup python flush.py & 这样运行,生成了nohup.out文件,但是内容始终是空的,试了半天也不行.浪费了不少时间.原因 python的输出又缓冲,导致out ...

  4. DVWA靶机-sql自动注入

    1. 使用dvwa靶机进行sql注入实战(注:当前靶机安全级别为low) 打开sql漏洞,发现输入不同的数字会返回不同的信息, 先尝试手工判断是否存在sql注入 一般sql注入语句像这样,我们构造的是 ...

  5. Node Sass does not yet support your current environment: Linux 64-bit with Unsupported runtime

    环境: ubuntu18 webstorm vue项目 报错原因: 缺少相关依赖 解决方法: npm rebuild node-sass 还未解决: npm uninstall --save node ...

  6. nginx 的location的匹配顺序

    匹配规则 匹配顺序 示例 [root@python vhast]# cat test.conf server { server_name haha.com; #listen 8080; rewrite ...

  7. 洛谷P1091合唱队形(DP)

    题目描述 NNN位同学站成一排,音乐老师要请其中的(N−KN-KN−K)位同学出列,使得剩下的KKK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2, ...

  8. python爬虫(六) Cookie

    什么是Cookie 在网站中,http的请求通常是无状态的(第一个和服务器连接并且登录之后,此时服务器知道是哪个用户,但是当第二次请求服务器时,服务器依然不知道当前请求的是哪个用户),cookie就是 ...

  9. 三、linux基础-常用命令man_cd_|_find_ln_>_history

    3通用命令3.1 man命令man pwd      来查看该命令的全部帮助手册备注:命令最终是在内核中执行的,但是内核并无法直接识别,所以先通过shell执行,然后再交给内核执行3.2 cd 命令c ...

  10. jsp页面 将数据以Json 格式保存到数据库

    1:jsp页面 <div class="control-group form-group all_activity"> <c:choose> <c:w ...