码迷,mamicode.com
首页 > 其他好文 > 详细

无聊看看c是咋写游戏的

时间:2019-04-18 22:02:59      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:info   std   graphic   null   位置   getch   需要   mode   use   


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

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

技术图片

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

 

无聊看看c是咋写游戏的

标签:info   std   graphic   null   位置   getch   需要   mode   use   

原文地址:https://www.cnblogs.com/chuxinbubian/p/10732519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!