怎么用C语言实现游戏坦克大战
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"怎么用C语言实现游戏坦克大战",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用C语言实现游戏坦克大战"吧!首先就是我们载入图片的函数t
千家信息网最后更新 2025年01月19日怎么用C语言实现游戏坦克大战
本篇内容主要讲解"怎么用C语言实现游戏坦克大战",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用C语言实现游戏坦克大战"吧!
首先就是我们载入图片的函数tupian.cpp
# include "tanke.h" 障碍物void LaoWang(int * tilex, int * tiley){ IMAGE img; loadimage(&img, _T("res\\tile.bmp")); putimage(*tilex, *tiley, 32 , 32 , &img, 32 * 5, 0 ); }void tileHong(int * tilex, int * tiley){ IMAGE img; loadimage(&img, _T("res\\tile.bmp")); putimage(*tilex, *tiley, 32, 32, &img, 32 * 0, 0 ); return; } void tileLv(int * tilex, int * tiley){ IMAGE img; loadimage(&img, _T("res\\tile.bmp")); putimage(*tilex, *tiley, 32, 32, &img, 32 * 2, 0 ); return;} void tileBai(int * tilex, int * tiley){ IMAGE img; loadimage(&img, _T("res\\tile.bmp")); putimage(*tilex, *tiley, 32, 32, &img, 32 * 1, 0 ); return;} void tileBlue(int *tilex, int *tiley){ IMAGE img; loadimage(&img, _T("res\\tile.bmp")); putimage(*tilex, *tiley, 32, 32, &img, 32 * 3, 0 );}//物品void FaZhang(int *wupinx, int *wupiny){ IMAGE img; loadimage(&img, _T("res\\fazhang.jpg")); putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 );} void ShouQiang(int *wupinx, int *wupiny){ IMAGE img; loadimage(&img, _T("res\\shouqiang.jpg")); putimage(*wupinx, *wupiny, 24, 24, &img, 0, 0 );} void ShangDian(int *wupinx, int *wupiny){ IMAGE img; loadimage(&img,_T("res\\shangdian.jpg")); putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 );} void YaoShui(int *wupinx, int *wupiny){ IMAGE img; loadimage(&img, _T("res\\yaoshui.jpg")); putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 );} void DunPai(int *wupinx, int *wupiny){ IMAGE img; loadimage(&img, _T("res\\dunpai.jpg")); putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 );} void XieZi(int *wupinx, int *wupiny){ IMAGE img; loadimage(&img, _T("res\\xiezi.jpg")); putimage(*wupinx, *wupiny, 28, 28, &img, 0, 0 );} void Boss(int *wupinx, int *wupiny){ IMAGE img; loadimage(&img, _T("res\\boss.jpg")); putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 );} void BigBoss(int *wupinx, int *wupiny){ IMAGE img; loadimage(&img, _T("res\\bigboss.jpg")); putimage(*wupinx, *wupiny, 32, 32, &img, 0, 0 );}
接下来是初始化的函数waiyuan.cpp
# include "tanke.h" /外部void JShengMing(int *j){ setcolor(GREEN); settextstyle(0, 0, ("宋体")); char c2[20] = "自己生命值:"; outtextxy(0, 20, c2); char c3[10] ; sprintf(c3, _T("%.1f"), 100* (60 - *j) / 60.0); outtextxy(90, 20, c3);} void DShengMing(int * d,int *k){ setcolor(GREEN); settextstyle(0, 0, ("宋体")); char c2[20] = "敌人生命值:"; outtextxy(0, 0, c2); char c3[10] ; sprintf(c3, _T("%.1f"), 100* (60 - *d) / 60.0); outtextxy(90, 0, c3); char c4[40] = "恭喜~! 现在起金币到2200有惊喜!";//胜利 if ( *k >= 8000 ) { setcolor(YELLOW); settextstyle(30, 0, ("宋体")); outtextxy(150, 0, c4); }} void Gold(int * gold){ setcolor(GREEN); settextstyle(0, 0, ("宋体")); char c2[20] = "金币:"; outtextxy(0, 40, c2); char c3[10] ; sprintf(c3, _T("%d"), *gold); outtextxy(40, 40, c3);} void start(void){ initgraph(200, 130); TCHAR s1[10]="坦克大战"; TCHAR s2[30]="按A 开始游戏 按B 退出游戏"; TCHAR s3[30]="按W S A D控制方向"; TCHAR s4[20]="按J 发射子弹"; TCHAR s5[20]="按C 看攻略"; outtextxy(70, 0, s1); outtextxy(0, 110, s2); outtextxy(60, 90, s5); outtextxy(55, 30, s4); outtextxy(35, 60, s3); while (true) { Sleep(500); if (GetAsyncKeyState('A')) { BeginBatchDraw(); closegraph(); initgraph(640, 480); Sleep(200); Quit(); return ; } if (GetAsyncKeyState('C')) { Sleep(200); GongLue(); } }}void GongLue(void){ initgraph(450, 300); TCHAR s1[20]="游戏攻略:"; TCHAR s2[50]="再打坦克之前先吃法杖打掉白色砖块,"; TCHAR s3[50]="这样敌坦克打白色就不能回血了,boss更应如此。"; TCHAR s15[70]="吃盾牌的作用就是可以碾压对手"; TCHAR s4[50]="打大坦克的时候,别和它对子弹这样会吃亏"; TCHAR s5[70]="可以直接选择上去碾压它 注意:当血足够少的时候走开,"; TCHAR s6[50]="用子弹打它这样才能得到钱,"; TCHAR s7[70]="小boss可以反复刷,虽然挣不到钱,但复活次数更需要。"; TCHAR s14[70]="吃手枪虽然速度快了但伤害会减少,但打绿boss时伤害反而增加"; TCHAR s8[70]="血要多吃,肯定划算,钱少了好挣,复活少了,就难挣了。"; TCHAR s9[50]="打终极boss时,记得要用大子弹打它伤害才能打出来。"; TCHAR s10[90]="最后温馨提示:有块红砖比较可疑~"; TCHAR s11[40]="最后:别想着跑后面去打终极Boss了"; TCHAR s12[30]="因为你超过它会直接被秒。"; TCHAR s13[30]="按A 开始游戏"; outtextxy(0, 0, s1); outtextxy(0, 20, s2); outtextxy(0, 40, s3); outtextxy(0, 60, s15); outtextxy(0, 80, s4); outtextxy(0, 100, s5); outtextxy(0, 120, s6); outtextxy(0, 140, s14); outtextxy(0, 160, s7); outtextxy(0, 180, s8); outtextxy(0, 200, s9); outtextxy(0, 220, s10); outtextxy(0, 240, s11); outtextxy(0, 260, s12); outtextxy(0, 280, s13); while (true) { Sleep(500); if (GetAsyncKeyState('A')) { keybd_event(65,0,0,0); keybd_event(65,0,KEYEVENTF_KEYUP,0); return ; } } } void MiJi(void){ closegraph(); printf("游戏秘籍:\n"); printf("恭喜你通关了,\n"); printf("告诉你些游戏作弊方法~!。\n"); printf("当你一直按住子弹不松的话 ,还有直接控制 子弹功能哦~~\n\n"); printf("哈哈 另外小技巧。打boss前 先把小坦克都压了\n"); printf("只留一个,因为boss出来 基地就危险了\n"); printf("还有 有的人 觉得花了600块的大子弹没伤害没用\n"); printf("我只能说他的用法不对 不是一下一下的点,\n\n"); printf("而是一直按着然后松开 那伤害高到 爆~!终极boss都打一半血!\n\n"); printf("还有 就是 就算Gameover了 不算输,我还留了一手\n\n"); printf("你把所有敌坦克都杀了 再按 Y\n\n"); printf("这时候你的基地就复活了,\n\n"); printf("~~嘘~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); printf("另外:小坦克靠近基地时按Y它就乖乖回去了\n\n"); printf("按B 游戏结束\n\n"); while (true) { Sleep(500); if (GetAsyncKeyState('B')) { exit(0); } } }void music(void){ mciSendString("open sound\\坦克大战.mp3 alias mymusic", NULL, 0, NULL); mciSendString("play mymusic", NULL, 0, NULL); return;}void start_(void){ music(); srand( (unsigned)time( NULL ) );//随机种子 setcolor(GREEN); setfillcolor(RED);}void win(pHongZhuan phongzhuan,bool *live2, bool *live3, bool *live4, bool *live5,bool *live6,bool *live7, bool *exist_laowang, bool *exist1, bool *wexist1,bool *wexist2,bool *wexist3,bool *wexist8){ char c[10] = "YOU WIN"; settextcolor(YELLOW); settextstyle(80, 0, ("宋体")); outtextxy(190, 100, c); char c1[20] = "按Y键 进入下一关"; settextstyle(30, 0, ("宋体")); outtextxy(230, 200, c1); if (GetAsyncKeyState('Y')) { *live2 = true; *live3 = true; *live4 = true; *live5 = true; *live6 = true; *live7 = true; *exist_laowang =true; *exist1 = true; phongzhuan[0].exist = true; phongzhuan[1].exist = true; *wexist1 = true; *wexist2 = true; *wexist3 = true; *wexist8 = true; } return ;} void lost(bool * live1, int *relive, int *gold){ char c[10] = "YOU LOST"; settextcolor(YELLOW); settextstyle(80, 0, ("宋体")); outtextxy(170, 100, c); char c1[20] = "按I键 复活,金币-60"; settextstyle(30, 0, ("宋体")); outtextxy(200, 200, c1); char c2[20] = "剩余复活次数:"; outtextxy(220, 230, c2); char c3[10] ; sprintf(c3, _T("%d"), 2 - *relive); outtextxy(426, 230, c3); if (GetAsyncKeyState('I')) { keybd_event(73,0,KEYEVENTF_KEYUP,0); (*relive)++; *gold -= 60; if (*relive < 3) *live1 = true; } if (*relive >= 3) GameOver(); return ;} void GameOver(void){ IMAGE img; loadimage(&img,_T("res\\gameover.bmp")); HDC dstDC = GetImageHDC(); HDC srcDC = GetImageHDC(&img); TransparentBlt(dstDC,200,50, 248, 160, srcDC, 0, 0, 248, 160, RGB(0,0,0));} bool Quit(void){ if(GetAsyncKeyState('B')) { if(MessageBox(NULL, "你确定要退出吗?", "提示", MB_YESNO) == IDYES) return true; } return false;}
再然后是效果函数xiaoguo.cpp
# include "tanke.h" bool LuoShui( int * x_, int * y_, int * tileBlue_x, int *tileBlue_y, int *d,int *gold){ IMAGE imgBoom; loadimage(&imgBoom,_T("res\\explode1.bmp")); if (*x_ + 14 <= *tileBlue_x + 32 && *x_ + 14 >= *tileBlue_x && *y_ + 14 <= *tileBlue_y + 32 && *y_ + 14 >= *tileBlue_y) { putimage(*x_, *y_, 28, 28, &imgBoom,0 ,0 ); (*d)++; *gold -= 2; if (*d >= 40) { *d = 0; return false; } } return true;} bool BossMiaoRen(int *y_,int *y9){ if (*y_ <= *y9 + 67) { mciSendString("open sound//boom.mp3 alias mymusic_1", NULL, 0, NULL); mciSendString("play mymusic_1", NULL, 0, NULL); return false; } return true;} bool HuoWu(int *x_, int *y_, int *wupinx, int *wupiny, int *d, int *HWsd){ IMAGE imgXing; loadimage(&imgXing, _T("res\\bore.bmp")); if (*x_ + 14 <= *wupinx + 32 && *x_ + 14 >= *wupinx && *y_ + 14 <= *wupiny + 32 && *y_ + 14 >= *wupiny) { putimage(*x_ - 4, *y_ - 4, 32, 32, &imgXing, 32 * 3 ,0 ); (*d)++; if (*d >= *HWsd) { if (*HWsd != 0) printf("\a"); *d = 0; return false; } } return true;}
之后是关于子弹的函数zidan.cpp
# include "tanke.h" 坦克 子弹void JBox(int (*x)[2][3],int * x_, int * y_, int * z,int * r, int * sd, int *zhidan,int *color1){ int h = 0;//图片的方向 int k , k1, k2;//k循环,k1,k2装有的方向 IMAGE img; loadimage(&img, _T("res\\player1.bmp")); if (x[*z + 1][0][1] == 0 && x[*z + 1][0][2] == -1)//w h = 0; if (x[*z + 1][0][1] == 0 && x[*z + 1][0][2] == 1)//s h = 2; if (x[*z + 1][0][1] == -1 && x[*z + 1][0][2] == 0)//a h = 3; if (x[*z + 1][0][1] == 1 && x[*z + 1][0][2] == 0)//d h = 1; if (GetAsyncKeyState('J'))//发射子弹 { *z = *z + 1; x[*z + 1][0][1] = x[*z ][0][1] ;//x坐标中的方向 x[*z + 1][0][2] = x[*z ][0][2] ;// if (x[*z][0][1] == 0 && x[*z][0][2] == -1)//w { x[*z][0][0] = *x_ + 34; x[*z][1][0] = *y_ + 14; } if (x[*z][0][1] == 0 && x[*z][0][2] == 1)//s { x[*z][0][0] = *x_ + 34; x[*z][1][0] = *y_ + 48; } if (x[*z][0][1] == -1 && x[*z][0][2] == 0)//a { x[*z][0][0] = *x_ + 17; x[*z][1][0] = *y_ + 33; } if (x[*z][0][1] == 1 && x[*z][0][2] == 0)//d { x[*z][0][0] = *x_ + 48; x[*z][1][0] = *y_ + 33; } keybd_event(74,0,KEYEVENTF_KEYUP,0); } putimage( *x_, *y_, 28 , 28 , &img, 28 * (*color1) , 28 * h ); for (k = 0; k<40; k++) { k1 = x[k][0][1]; k2 = x[k][0][2]; if(*r % *sd == 0)//己方子弹的的速度 { if ( k1 == 1 && k2 == 0 && x[k][0][0] != 0) x[k][0][0] = x[k][0][0] + 4; if ( k1 == 0 && k2 == 1 && x[k][0][0] != 0) x[k][1][0] = x[k][1][0] + 4; if ( k1 == -1 && k2 == 0 && x[k][0][0] != 0) x[k][0][0] = x[k][0][0] - 4; if ( k1 == 0 && k2 == -1 && x[k][0][0] != 0) x[k][1][0] = x[k][1][0] - 4; } if ( (x[k][0][0] -20) >= 640 || (x[k][0][0] - 20)<= 0) x[k][0][0] = 0 ;//子弹到边界 就初始化数组坐标x为0 if ( (x[k][1][0] -20) >= 480 || (x[k][1][0] - 20)<= 0) x[k][0][0] = 0 ; solidcircle(x[k][0][0] - 20, x[k][1][0] - 20, *zhidan); } if (*z >= 38)//数组 要满时就循环 { x[1][0][1] = x[*z ][0][1] ; x[1][0][2] = x[*z ][0][2] ; x[1][1][1] = x[*z ][1][1] ; x[1][1][2] = x[*z ][1][2] ; *z = 0; } return ;} void DBox(int (*x)[2][3],int * x_, int * y_, int * z, int *r, int * color){ int h = 0; int k , k1, k2; IMAGE img; loadimage(&img,_T("res\\enemy.bmp")); if (x[*z + 1][0][1] == 0 && x[*z + 1][0][2] == -1)//w h = 0; if (x[*z + 1][0][1] == 0 && x[*z + 1][0][2] == 1)//s h = 2; if (x[*z + 1][0][1] == -1 && x[*z + 1][0][2] == 0)//a h = 3; if (x[*z + 1][0][1] == 1 && x[*z + 1][0][2] == 0)//d h = 1; if ((*r) % 80 == 0)//敌坦克发子弹频率 { *z = *z + 1; x[*z + 1][0][1] = x[*z ][0][1] ;//给方向 x[*z + 1][0][2] = x[*z ][0][2] ; if (x[*z][0][1] == 0 && x[*z][0][2] == -1)//w { x[*z][0][0] = *x_ + 34; x[*z][1][0] = *y_ + 14; } if (x[*z][0][1] == 0 && x[*z][0][2] == 1)//s { x[*z][0][0] = *x_ + 34; x[*z][1][0] = *y_ + 48; } if (x[*z][0][1] == -1 && x[*z][0][2] == 0)//a { x[*z][0][0] = *x_ + 17; x[*z][1][0] = *y_ + 33; } if (x[*z][0][1] == 1 && x[*z][0][2] == 0)//d { x[*z][0][0] = *x_ + 48; x[*z][1][0] = *y_ + 33; } } putimage( *x_, *y_, 28 , 28 , &img, *color , 28 * h ); for (k = 0; k<40; k++) { k1 = x[k][0][1]; k2 = x[k][0][2]; if(*r % 1 == 0)//敌坦克子弹速度 { if ( k1 == 1 && k2 == 0 && x[k][0][0] != 0) x[k][0][0] = x[k][0][0] + 2; if ( k1 == 0 && k2 == 1 && x[k][0][0] != 0) x[k][1][0] = x[k][1][0] + 2; if ( k1 == -1 && k2 == 0 && x[k][0][0] != 0) x[k][0][0] = x[k][0][0] - 2; if ( k1 == 0 && k2 == -1 && x[k][0][0] != 0) x[k][1][0] = x[k][1][0] - 2; } if ( (x[k][0][0] -20) >= 640 || (x[k][0][0] - 20)<= 0) x[k][0][0] = 0 ; if ( (x[k][1][0] -20) >= 480 || (x[k][1][0] - 20)<= 0) x[k][0][0] = 0 ; fillcircle(x[k][0][0] - 20, x[k][1][0] - 20, 5); } if (*z >= 38) { x[1][0][1] = x[*z ][0][1] ; x[1][0][2] = x[*z ][0][2] ; x[1][1][1] = x[*z ][1][1] ; x[1][1][2] = x[*z ][1][2] ; *z = 0; } return ;} void DBoxBig(int (*x)[2][3],int * x_, int * y_, int * z, int *r, int * color){ int h = 0; int k , k1, k2; IMAGE img; loadimage(&img,_T("res\\enemy.bmp")); if (x[*z + 1][0][1] == 0 && x[*z + 1][0][2] == -1)//w h = 0; if (x[*z + 1][0][1] == 0 && x[*z + 1][0][2] == 1)//s h = 2; if (x[*z + 1][0][1] == -1 && x[*z + 1][0][2] == 0)//a h = 3; if (x[*z + 1][0][1] == 1 && x[*z + 1][0][2] == 0)//d h = 1; if ((*r) % 30 == 0)//敌坦克发子弹频率 { *z = *z + 1; x[*z + 1][0][1] = x[*z ][0][1] ; x[*z + 1][0][2] = x[*z ][0][2] ; if (x[*z][0][1] == 0 && x[*z][0][2] == -1)//w { x[*z][0][0] = *x_ + 34; x[*z][1][0] = *y_ + 14; } if (x[*z][0][1] == 0 && x[*z][0][2] == 1)//s { x[*z][0][0] = *x_ + 34; x[*z][1][0] = *y_ + 48; } if (x[*z][0][1] == -1 && x[*z][0][2] == 0)//a { x[*z][0][0] = *x_ + 17; x[*z][1][0] = *y_ + 33; } if (x[*z][0][1] == 1 && x[*z][0][2] == 0)//d { x[*z][0][0] = *x_ + 48; x[*z][1][0] = *y_ + 33; } keybd_event(74,0,KEYEVENTF_KEYUP,0); } putimage( *x_, *y_, 28 , 28 , &img, *color , 112 + (28 * h) ); for (k = 0; k<40; k++) { k1 = x[k][0][1]; k2 = x[k][0][2]; if(*r % 2 == 0)//敌坦克子弹速度 { if ( k1 == 1 && k2 == 0 && x[k][0][0] != 0) x[k][0][0] = x[k][0][0] + 15; if ( k1 == 0 && k2 == 1 && x[k][0][0] != 0) x[k][1][0] = x[k][1][0] + 15; if ( k1 == -1 && k2 == 0 && x[k][0][0] != 0) x[k][0][0] = x[k][0][0] - 15; if ( k1 == 0 && k2 == -1 && x[k][0][0] != 0) x[k][1][0] = x[k][1][0] - 15; } if ( (x[k][0][0] -20) >= 640 || (x[k][0][0] - 20)<= 0) x[k][0][0] = 0 ; if ( (x[k][1][0] -20) >= 480 || (x[k][1][0] - 20)<= 0) x[k][0][0] = 0 ; fillcircle(x[k][0][0] - 20, x[k][1][0] - 20, 5); } if (*z >= 38) { x[1][0][1] = x[*z ][0][1] ; x[1][0][2] = x[*z ][0][2] ; x[1][1][1] = x[*z ][1][1] ; x[1][1][2] = x[*z ][1][2] ; *z = 0; } return ;} void DBoxFeiJi(int (*x_9)[2][3],int (*x_10)[2][3],int (*x_11)[2][3],int * x_, int * y_, int * z, int *r){ int k; IMAGE img; loadimage(&img, _T("res\\feiji.jpg")); HDC dstDC = GetImageHDC(); HDC srcDC = GetImageHDC(&img); TransparentBlt(dstDC,*x_,*y_, 65, 65, srcDC, 0, 0, 65, 65, RGB(0,0,0));//飞机 if ((*r) % 13 == 0)//敌坦克发子弹频率 { *z = *z + 1; x_9[*z][0][0] = *x_ + 52; x_9[*z][1][0] = *y_ + 85; x_10[*z][0][0] = *x_ + 52; x_10[*z][1][0] = *y_ + 85; x_11[*z][0][0] = *x_ + 52; x_11[*z][1][0] = *y_ + 85; } for (k = 0; k<40; k++) { if(*r % 5 == 0 && x_10[k][0][0] != 0)//敌坦克子弹速度 { x_9[k][1][0] = x_9[k][1][0] + 15; x_10[k][0][0] = x_10[k][0][0] + 15; x_10[k][1][0] = x_10[k][1][0] + 15; x_11[k][0][0] = x_11[k][0][0] - 15; x_11[k][1][0] = x_11[k][1][0] + 15; } if ( (x_9[k][1][0] -20) >= 480 ) x_9[k][0][0] = 0 ; if ( (x_10[k][1][0] -20) >= 480) x_10[k][0][0] = 0 ; if ( (x_11[k][1][0] -20) >= 480) x_11[k][0][0] = 0 ; fillcircle(x_9[k][0][0] - 20, x_9[k][1][0] - 20, 7); fillcircle(x_10[k][0][0] - 20, x_10[k][1][0] - 20, 7); fillcircle(x_11[k][0][0] - 20, x_11[k][1][0] - 20, 7); } if (*z >= 38) *z = 0; return ;}
接下来是我们子弹暴炸时的函数boom.cpp
# include "tanke.h"/效果bool DBoom(int (*x)[2][3], int * x_, int *y_, int *d,int *gold){ int i;//循环用 IMAGE imgBoom; loadimage(&imgBoom, _T("res\\explode1.bmp")); for (i=1; i<39; i++)//被击中爆炸 if (x[i][0][0] <= *x_+48 && x[i][0][0] >= *x_ + 20 && x[i][1][0] <= *y_ + 48 && x[i][1][0] >= *y_ + 20) { if (*d % 10 == 0) x[i][0][0] = 0; putimage(*x_, *y_, 28, 28, &imgBoom,0 ,0 ); (*d)++; if (*d >= 60) { mciSendString("open sound//boom.mp3 alias mymusic_1", NULL, 0, NULL); mciSendString("play mymusic_1", NULL, 0, NULL); *d = 0; *gold += 10; return false; } mciSendString("close mymusic_1", NULL, 0, NULL); } return true; } bool QZBoom(int (*x)[2][3], int * x_, int *y_)//强制子弹消失,物体爆炸。{ int i;//循环用 for (i=1; i<39; i++)//被击中爆炸 if (x[i][0][0] <= *x_+52 && x[i][0][0] >= *x_ + 20 && x[i][1][0] <= *y_ + 52 && x[i][1][0] >= *y_ + 20) { x[i][0][0] = 0; return false; } return true;} bool DBoomBig(int (*x)[2][3], int * x_, int *y_, int *d){ int i;//循环用 IMAGE imgBoom; loadimage(&imgBoom,_T("res\\explode2.bmp")); for (i=1; i<39; i++)//被击中爆炸 if (x[i][0][0] <= *x_+52 && x[i][0][0] >= *x_ + 20 && x[i][1][0] <= *y_ + 52 && x[i][1][0] >= *y_ + 20) { putimage(*x_ - 18, *y_ -18, 64, 64, &imgBoom,0 ,0 ); (*d)++; if (*d % 10 == 0) x[i][0][0] = 0; if (*d >= 60) { mciSendString("open sound//boom.mp3 alias mymusic_1", NULL, 0, NULL); mciSendString("play mymusic_1", NULL, 0, NULL); *d = 0; return false; } mciSendString("close mymusic_1", NULL, 0, NULL); } return true; }bool DBossBoomBig(int (*x)[2][3], int * x_, int *y_, int *k, int*zhidan){ int i;//循环用 IMAGE imgBoom; loadimage(&imgBoom,_T("res\\explode2.bmp")); for (i=1; i<39; i++)//被击中爆炸 if (x[i][0][0] <= *x_+70 && x[i][0][0] >= *x_ + 20 && x[i][1][0] <= *y_ + 70 && x[i][1][0] >= *y_ + 20) { putimage(*x_ - 18, *y_ -18, 64, 64, &imgBoom,0 ,0 ); if (*zhidan == 5) (*k)++; if (*zhidan == 15) (*k) += 10; if (*k >= 8000) { x[i][0][0] = 0; keybd_event(89,0,0,0); keybd_event(89,0,KEYEVENTF_KEYUP,0); return false; } } setcolor(GREEN); settextstyle(0, 0, ("宋体")); char c2[20] = "BOSS生命值:"; outtextxy(220, 0, c2); char c3[10] ; sprintf(c3, _T("%.1f"),1000*(8000 - *k)/8000.0 ); outtextxy(320, 0, c3); return true; }bool DBossBoomSmall(int (*x)[2][3], int * x_, int *y_, int *l, int*sd){ int i;//循环用 IMAGE imgBoom; loadimage(&imgBoom, _T("res\\explode2.bmp")); for (i=1; i<39; i++)//被击中爆炸 if (x[i][0][0] <= *x_+48 && x[i][0][0] >= *x_ + 20 && x[i][1][0] <= *y_ + 48 && x[i][1][0] >= *y_ + 20) { putimage(*x_ - 18, *y_ -18, 64, 64, &imgBoom,0 ,0 ); if (*sd == 2) (*l)++; if (*sd == 1) (*l) += 10; if (*l >= 1000) { x[i][0][0] = 0; *l = 0; return false; } } setcolor(GREEN); settextstyle(0, 0, ("宋体")); char c2[20] = "BOSS生命值:"; outtextxy(220, 0, c2); char c3[10] ; sprintf(c3, _T("%.1f"),1000*(1000 - *l)/1000.0 ); outtextxy(320, 0, c3); return true;}
最后就是我们运行的主函数了main.cpp
# include "tanke.h" int main(void){ start();//开始说明 int r = 0;//减速的 int relive = 0;//复活次数 int sd = 2;//子弹速度 int HWsd = 40; int gold = 0;//金币 int zhidan = 5;//己方坦克子弹大小 int o = 0; //boss方向储存 int ydsd = 2;//移动速度 int j = 0;//爆炸图片多次,或者生命值 int d = 0;//爆炸图片多次 int k = 0;//boss生命值 int l = 0;//小boss生命值 int m = 0;//物品生命值 TanKe tanke[7] = { {0,0, 0, 0, true, {0}}, {0,0, 0, 0, true, {0}}, {0,0, 0, 56, true, {0}}, {0,0, 0, 112, true, {0}}, {0,0, 0, 168, true, {0}}, {0,0, 0, 112, true, {0}}, {0,0, 0, 168, true, {0}}}; pTanKe ptanke = NULL; BaiZhuan baizhuan[3] = { {0,0,true},{0,0,true},{0,0,true}}; pBaiZhuan pbaizhuan = NULL; LvZhuan lvzhuan[12]; pLvZhuan plvzhuan = NULL; HongZhuan hongzhuan[2] ={ {0,0,true},{0,0,true}}; pHongZhuan phongzhuan = NULL; tanke[0].d[1][0][1] = 0;//初始化己方第一颗子弹方向上 tanke[0].d[1][0][2] = -1; tanke[1].d[1][0][1] = 0;//初始化己方第一颗子弹方向上 tanke[1].d[1][0][2] = -1; tanke[2].d[1][0][1] = 0;//初始化己方第一颗子弹方向上 tanke[2].d[1][0][2] = -1; tanke[3].d[1][0][1] = 0;//初始化己方第一颗子弹方向上 tanke[3].d[1][0][2] = -1; tanke[4].d[1][0][1] = 0;//初始化己方第一颗子弹方向上 tanke[4].d[1][0][2] = -1; tanke[5].d[1][0][1] = 0;//初始化己方第一颗子弹方向上 tanke[5].d[1][0][2] = -1; tanke[6].d[1][0][1] = 0;//初始化己方第一颗子弹方向上 tanke[6].d[1][0][2] = -1; int z8 = 0;//绿坦克 int z9 = 0;//飞机 int color8 = 0;//绿boss int x_8[40][2][3] = {0};//绿坦克子弹 int x_9[40][2][3] = {0}; int x_10[40][2][3] = {0};//飞机子弹 int x_11[40][2][3] = {0};//飞机子弹 x_8[1][0][1] = 0;//初始化己方第一颗子弹方向上 x_8[1][0][2] = -1; start_(); bool live8 = false;//绿坦克 bool live9 = false;//飞机 bool exist_laowang = true; bool exist1 = true; //boss红砖 bool wexist1 = true;//法杖 bool wexist2 = true;//枪 bool wexist3 = true;//商店 bool wexist4 = true;//药水 bool wexist5 = true;//盾牌 bool wexist8 = true;//鞋子 bool wexist6 = true;//物品-boss bool wexist7 = true;//物品-bigboss int tilelaowang_x = 304;//老王 int tilelaowang_y = 448; int tileHong_x1 = 304;//老王前障碍物 int tileHong_y1 = 416; while(true) { tanke[0].x = 28 + rand() % 584, tanke[0].y = 400 + rand() % 52;//己方方块, tanke[1].x = 28 + rand() % 584, tanke[1].y = 28 + rand() % 124;//敌方方块,↓同理 tanke[2].x = 28 + rand() % 584, tanke[2].y = 28 + rand() % 124; tanke[3].x = 28 + rand() % 584, tanke[3].y = 28 + rand() % 124; tanke[4].x = 28 + rand() % 584, tanke[4].y = 28 + rand() % 124; tanke[5].x = 28 + rand() % 584, tanke[5].y = 28 + rand() % 124; tanke[6].x = 28 + rand() % 584, tanke[6].y = 28 + rand() % 124; //int x8 = 28 + rand() % 584, y8 = 28 + rand() % 124;//放在下面的 int x9 = 320, y9 = -80;//大boss hongzhuan[0].x = 100 + rand() % 376;//红色砖块 hongzhuan[0].y = 200 + rand() % 216; hongzhuan[1].x = 32 + rand() % 576;//红色砖块 hongzhuan[1].y = 32 + rand() % 416; baizhuan[0].x = 32 + rand() % 576; //白色砖块 baizhuan[0].y = 32 + rand() % 416; baizhuan[1].x = 32 + rand() % 576; //白色砖块 baizhuan[1].y = 32 + rand() % 416; baizhuan[2].x = 32 + rand() % 576; //白色砖块 baizhuan[2].y = 32 + rand() % 416; int tileBai_x4 = -20; //老王前白色砖块真的打不烂! int tileBai_y4 = -20; lvzhuan[0].x = 32 + rand() % 576; //绿色砖块 lvzhuan[0].y = 32 + rand() % 416; lvzhuan[1].x = 32 + rand() % 576; lvzhuan[1].y = 32 + rand() % 416; lvzhuan[2].x = 32 + rand() % 576; lvzhuan[2].y = 32 + rand() % 416; lvzhuan[3].x = 32 + rand() % 576; lvzhuan[3].y = 32 + rand() % 416; lvzhuan[4].x = 32 + rand() % 576; lvzhuan[4].y = 32 + rand() % 416; lvzhuan[5].x = 32 + rand() % 576; lvzhuan[5].y = 32 + rand() % 416; lvzhuan[6].x = 32 + rand() % 576; //绿色砖块 lvzhuan[6].y = 32 + rand() % 416; lvzhuan[7].x = 32 + rand() % 576; lvzhuan[7].y = 32 + rand() % 416; lvzhuan[8].x = 32 + rand() % 576; lvzhuan[8].y = 32 + rand() % 416; lvzhuan[9].x = 32 + rand() % 576; lvzhuan[9].y = 32 + rand() % 416; lvzhuan[10].x = 32 + rand() % 576; lvzhuan[10].y = 32 + rand() % 416; lvzhuan[11].x = 32 + rand() % 576; lvzhuan[11].y = 32 + rand() % 416; int tileBlue_x1 = 32 + rand() % 576; //蓝色砖块 int tileBlue_y1 = 32 + rand() % 416; int tileBlue_x2 = 32 + rand() % 576; //蓝色砖块 int tileBlue_y2 = 32 + rand() % 416; int fazhang_x1 = 32 + rand() % 576; //物品-法杖; int fazhang_y1 = 32 + rand() % 416; int shouqiang_x1 = 32 + rand() % 576; //物品-枪; int shouqiang_y1 = 32 + rand() % 416; int shangdian_x1 = 32 + rand() % 576; //物品-商店; int shangdian_y1 = 200 + rand() % 216; int yaoshui_x1 = 32 + rand() % 576; //物品-药水; int yaoshui_y1 = 32 + rand() % 416; int dunpai_x1 = 32 + rand() % 576; //物品-盾牌; int dunpai_y1 = 32 + rand() % 116; int xiezi_x1 = 32 + rand() % 576; //物品-鞋子; int xiezi_y1 = 32 + rand() % 116; int boss_x1 = 100 + rand() % 376; //物品-Boss; int boss_y1 = 100 + rand() % 216; int x8 = boss_x1 , y8 = boss_y1; int bigboss_x1 = hongzhuan[0].x ; //物品-bigBoss; int bigboss_y1 = hongzhuan[0].y ; while (true) { ZhengTiFangXiang(tanke,baizhuan,hongzhuan,x_8, &live8,&live9, &r,&x8,&y8,&x9,&y9, &z8, &o,&ydsd);//方向 cleardevice();//清屏 ZhengTiLaoWang(tanke,x_8,x_9,x_10,x_11, &exist_laowang,&exist1,&gold,&d, &tilelaowang_x,&tilelaowang_y,&tileHong_x1,&tileHong_y1,&tileBai_x4,&tileBai_y4,&live9);//老王 ZhengTiBaiSeZhangAiWu(tanke,x_8,x_9,x_10,x_11, &wexist1, &d,baizhuan);//白砖 ZhengTiLanSeZhangAiWu(&tileBlue_x1,&tileBlue_y1,&tileBlue_x2,&tileBlue_y2);//蓝砖 ZhengTiTanKeBaoZha(tanke,x_8,x_9,x_10,x_11, &live8,&live9, &r,&x8,&y8,&x9,&y9, &sd,&color8, &j,&d,&k,&l,&gold,&zhidan, &z8,&z9);//坦克 、 爆炸 ZhengTiLuoShui(tanke,&tileBlue_x1,&tileBlue_y1,&tileBlue_x2,&tileBlue_y2, &j,&gold,&y9);//落水.boss秒人 ZhengTiLvSeZhangAiWu(lvzhuan);//绿砖 ZhengTiWuPin(tanke,&x8,&y8, &live8,&live9, &fazhang_x1,&fazhang_y1, &shouqiang_x1,&shouqiang_y1, &shangdian_x1,&shangdian_y1, &yaoshui_x1,&yaoshui_y1, &dunpai_x1,&dunpai_y1, &xiezi_x1,&xiezi_y1, &boss_x1,&boss_y1, &bigboss_x1,&bigboss_y1, &wexist1, &wexist2,&wexist3,&wexist4,&wexist5,&wexist6,&wexist7,&wexist8, &sd,&HWsd,&ydsd, &d,&j,&gold,&zhidan,&relive);//物品 ZhengTiHongSeZhangAiWu(tanke,x_8,x_9, &d,hongzhuan);//红砖 后藏boss ZhengTiShengMing(tanke,hongzhuan, &exist_laowang,&exist1,&wexist1,&wexist2,&wexist3,&wexist8, &relive,&j,&d,&gold,&k);//生命 FlushBatchDraw(); if (GetAsyncKeyState('Y')) {break;} if (Quit()) {exit(0);} if (gold == 2200) { MiJi(); } } } EndBatchDraw(); return 0;}
到此,相信大家对"怎么用C语言实现游戏坦克大战"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
子弹
坦克
方向
物品
砖块
宋体
己方
生命
爆炸
循环
函数
白色
大战
飞机
图片
就是
金币
老王
语言
基地
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发有些什么软件
服务器状态aq和s
塔城优质云服务器
科技界进入互联网的主干网
上海络程网络技术有限公司
易语言mysql插入数据库
开放性家庭网络安全吗
客户端直连数据库安全吗
易淘无限网络技术有限公司
邯郸软件开发简介
sql数据库创建索引
数据库安全性问题的原因
连接数据库动态图表
二手服务器好不好
重庆软件开发工程师招聘
服务器安全软件用什么好
万方数据库可以查图书吗
免费防护服务器
网络安全本质上讲
ios软件开发难度
我的世界中国版服务器玩一会就退
互联网企业服务器放在哪
网络安全应用技能
有没有网络安全类的证
java 批处理 数据库
考试宝典软件开发
软件开发费用和税金比例
软件开发的七项原则
linux系统服务器安装与部署
凋零斯拉可以把人踢出服务器吗