五子棋游戏——HGE

来源:互联网 发布:阿里云备案系统 编辑:程序博客网 时间:2024/05/16 06:13

曾经用 HGE 做的一个五子棋游戏-。-今天偶然翻了出来, 给大家分享一下

//main.cpp#include <hge.h>#include <hgeSprite.h>#include "menu.h"int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){init();doit();delit();return 0;}

//menu.hHEFFECT papa, music;//下棋声音HTEXTURE bg0, bg1, bg2, bg3, bg4;//背景更换HTEXTURE bgbg, white, black, whitewin, blackwin;HGE *hge = 0;hgeSprite *s_bgbg, *s_bg, *s_white, *s_black, *s_whitewin, *s_blackwin;bool mouse_lbtn = 0;//记录鼠标左键点击bool isWhiteBlack = 0;//判断当前下子方float wfx[205], wfy[205];//白子坐标float bfx[205], bfy[205];//黑子坐标int cntw = 0, cntb = 0;//白子数与黑子数int qi[20][20];//棋盘int over = 0;//是否结束int bgrand;//背景随机数int dir[8][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1}};void boom()//点击声音{hge->Effect_Play(papa);}int walk(int x, int y, int dx, int dy){int s = 0;int xx = x;int yy = y;while (1){xx += dx;yy += dy;if (xx < 0 || yy < 0 || xx > 18 || yy > 18 || qi[xx][yy] != qi[x][y]) return s;s++;}}void judge(int x, int y)//判断是否五星连珠{for (int i = 0; i < 8; i += 2){if (walk(x, y, dir[i][0], dir[i][1]) + (walk(x, y, dir[i + 1][0], dir[i + 1][1])) >= 4){over = qi[x][y];return;}}}void leftButtonLastState(){bool mouse_lbtn0 = hge->Input_GetKeyState(HGEK_LBUTTON);if (mouse_lbtn == 1 && mouse_lbtn0 == 0){if (over){bgrand = rand() % 5;switch (bgrand){case 0: s_bg = new hgeSprite(bg0, 0, 0, 1024, 768);break;case 1: s_bg = new hgeSprite(bg1, 0, 0, 1024, 768);break;case 2: s_bg = new hgeSprite(bg2, 0, 0, 1024, 768);break;case 3: s_bg = new hgeSprite(bg3, 0, 0, 1024, 768);break;case 4: s_bg = new hgeSprite(bg4, 0, 0, 1024, 768);break;}memset(qi, 0, sizeof(qi));cntw = 0;cntb = 0;over = 0;isWhiteBlack = false;mouse_lbtn = 0;return;}float x1, y1;hge->Input_GetMousePos(&x1, &y1);if (x1 < 100 && y1 < 100){if (isWhiteBlack == false){if (cntb == 0) return;cntb--;int xx = (bfx[cntb] + 10 - 450) / 30;int yy = (bfy[cntb] + 10 - 114) / 30;qi[xx][yy] = 0;isWhiteBlack = true;}else{if (cntw == 0) return;cntw--;int xx = (wfx[cntw] + 10 - 450) / 30;int yy = (wfy[cntw] + 10 - 114) / 30;qi[xx][yy] = 0;isWhiteBlack = false;}}if (isWhiteBlack == false){if (x1 > 445 && x1 < 995 && y1 > 109 && y1 < 659){x1 = (int)(x1 - 435) / 30 * 30 + 450;y1 = (int)(y1 - 99) / 30 * 30 + 114;int xx = (x1 - 450) / 30;int yy = (y1 - 114) / 30;if (qi[xx][yy] == 0){wfx[cntw] = x1 - 10;wfy[cntw] = y1 - 10;qi[xx][yy] = 1;cntw++;isWhiteBlack = true;boom();judge(xx, yy);}}}else{if (x1 > 445 && x1 < 995 && y1 > 109 && y1 < 659){x1 = (int)(x1 - 435) / 30 * 30 + 450;y1 = (int)(y1 - 99) / 30 * 30 + 114;int xx = (x1 - 450) / 30;int yy = (y1 - 114) / 30;if (qi[xx][yy] == 0){bfx[cntb] = x1 - 10;bfy[cntb] = y1 - 10;qi[xx][yy] = 2;cntb++;isWhiteBlack = false;boom();judge(xx, yy);}}}mouse_lbtn = 0;}}bool RenderFunc(){hge->Gfx_BeginScene();s_bg->Render(0, 0);//s_bgbg->Render(416, 80);for (int i = 0; i < 19; i++){hge->Gfx_RenderLine(450.0, 114.0 + i * 30, 990.0, 114.0 + i * 30, 0xff000000, 0.5);}for (int i = 0; i < 19; i++){hge->Gfx_RenderLine(450.0 + i * 30, 114.0, 450.0 + i * 30, 654.0, 0xff000000, 0.5);}for (int i = 0; i < cntw; i++){s_white->Render(wfx[i], wfy[i]);}for (int i = 0; i < cntb; i++){s_black->Render(bfx[i], bfy[i]);}if (over == 1)s_whitewin->Render(200, 200);if (over == 2)s_blackwin->Render(200, 200);hge->Gfx_EndScene();return false;}bool FrameFunc(){if (hge->Input_GetKeyState(HGEK_LBUTTON)) mouse_lbtn = 1;if (mouse_lbtn == 1) leftButtonLastState();if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;if (hge->Input_GetKeyState(HGEK_A)) hge->Effect_Play(music);return false;}void init(){hge=hgeCreate(HGE_VERSION);hge->System_SetState(HGE_SHOWSPLASH, false);hge->System_SetState(HGE_SCREENWIDTH, 1024);hge->System_SetState(HGE_SCREENHEIGHT, 768);hge->System_SetState(HGE_SCREENBPP, 32);hge->System_SetState(HGE_LOGFILE, "Gobang.log");hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);hge->System_SetState(HGE_RENDERFUNC, RenderFunc);hge->System_SetState(HGE_TITLE, "Gobang");hge->System_SetState(HGE_WINDOWED, true);hge->System_SetState(HGE_USESOUND, true);hge->System_SetState(HGE_HIDEMOUSE, false);}void doit(){if(hge->System_Initiate()){memset(qi, 0, sizeof(qi));// Load sounds and texturespapa = hge->Effect_Load("menu.wav");music = hge->Effect_Load("music.mp3");bgbg = hge->Texture_Load("bgbg.png");bg0 = hge->Texture_Load("bg0.jpg");bg1 = hge->Texture_Load("bg1.jpg");bg2 = hge->Texture_Load("bg2.jpg");bg3 = hge->Texture_Load("bg3.jpg");bg4 = hge->Texture_Load("bg4.jpg");white = hge->Texture_Load("white.png");black = hge->Texture_Load("black.png");whitewin = hge->Texture_Load("whitewin.png");blackwin = hge->Texture_Load("blackwin.png");if (papa && bgbg && bg0 && bg1 && bg2 && bg3 && bg4 && white && black && whitewin && blackwin){bgrand = rand() % 5;switch (bgrand){case 0: s_bg = new hgeSprite(bg0, 0, 0, 1024, 768);case 1: s_bg = new hgeSprite(bg1, 0, 0, 1024, 768);case 2: s_bg = new hgeSprite(bg2, 0, 0, 1024, 768);case 3: s_bg = new hgeSprite(bg3, 0, 0, 1024, 768);case 4: s_bg = new hgeSprite(bg4, 0, 0, 1024, 768);}s_bgbg = new hgeSprite(bgbg, 0, 0, 608, 608);s_white = new hgeSprite(white, 0, 0, 24, 24);s_black = new hgeSprite(black, 0, 0, 24, 24);s_whitewin = new hgeSprite(whitewin, 0, 0, 250, 200);s_blackwin = new hgeSprite(blackwin, 0, 0, 250, 200);hge->System_Start();}else{MessageBoxA(NULL, "Can't load some sound(s) or texture(s)", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);}}}void delit(){hge->Texture_Free(bg0);hge->Texture_Free(bg1);hge->Texture_Free(bg2);hge->Texture_Free(bg3);hge->Texture_Free(bg4);hge->Texture_Free(bgbg);hge->Texture_Free(black);hge->Texture_Free(white);hge->Texture_Free(blackwin);hge->Texture_Free(whitewin);hge->Effect_Free(papa);delete s_bg;delete s_bgbg;delete s_black;delete s_white;delete s_blackwin;delete s_whitewin;hge->System_Shutdown();hge->Release();}

当初代码写的比较烂,拿出来丢丢脸。可怜

0 0
原创粉丝点击