基本信息
源码名称:c++ 坦克大战 小游戏源码(tc库)
源码大小:0.01M
文件格式:.cpp
开发语言:C/C++
更新时间:2018-04-07
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
#include <graphics.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <bios.h> #define KEY_ESC 0x01 #define KEY_SPACE 0x39 #define KEY_UP 0x48 #define KEY_LEFT 0x4b #define KEY_RIGHT 0x4d #define KEY_DOWN 0x50 int map[20][20] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 1, 1, 0, 1, 1, 1, 1, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 0, 1, 1, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 8, 2, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; struct f { int x; int y; int direction; }; struct play { int x; int y; int direction; struct f fire[5]; int score; }Playone; struct a { int x; int y; int color; int direction; int directiontwo; int fireplay; struct f fire; }amy[5]; char key_state[128], key_pressed[128]; void Init(); void End(); void DrawMap(); void DrawWater(int x, int y); void DrawBrick(int x, int y); void DrawTone(int x, int y); void DrawHome(int x, int y); void DrawBlack(int x, int y); void DrawPlay(int x, int y); void DrawAmy(int x, int y, int i); void Score(); void GamePlay(); void GameOver(); void TimeDelay(unsigned long microsec); int GetKey(int ScanCode); void interrupt far(*OldInt9Handler)(); void far interrupt NewInt9(); void InstallKeyboard(); void ShutDownKeyboard(); void main(void) { Init(); DrawMap(); GamePlay(); End(); } void TimeDelay(unsigned long microsec) { union REGS r; r.h.ah = 0x86; r.x.cx = microsec >> 16; r.x.dx = microsec; int86(0x15, &r, &r); } void Init() { int gd = DETECT, gm; initgraph(&gd, &gm, "C:\\TC20\\BGI"); cleardevice(); InstallKeyboard(); } void End() { ShutDownKeyboard(); closegraph(); } void DrawTone(int x, int y) { setfillstyle(SOLID_FILL, 7); bar(100 x * 20 - 9, 50 y * 20 - 9, 100 x * 20 9, 50 y * 20 9); } void DrawWater(int x, int y) { setfillstyle(SOLID_FILL, BLUE); bar(100 x * 20 - 9, 50 y * 20 - 9, 100 x * 20 9, 50 y * 20 9); } void DrawBrick(int x, int y) { setfillstyle(SOLID_FILL, 6); bar(100 x * 20 - 9, 50 y * 20 - 9, 100 x * 20 9, 50 y * 20 9); setcolor(15); line(100 x * 20 - 9, 50 y * 20 - 4, 100 x * 20 9, 50 y * 20 - 4); line(100 x * 20 - 9, 50 y * 20 4, 100 x * 20 9, 50 y * 20 4); line(100 x * 20 - 4, 50 y * 20 - 9, 100 x * 20 - 4, 50 y * 20 9); line(100 x * 20 4, 50 y * 20 - 9, 100 x * 20 4, 50 y * 20 9); } void DrawHome(int x, int y) { setcolor(0); setfillstyle(SOLID_FILL, GREEN); fillellipse(100 x * 20, 50 y * 20, 9, 9); } void DrawBlack(int x, int y) { setcolor(0); setfillstyle(SOLID_FILL, 0); bar(100 x * 20 - 9, 50 y * 20 - 9, 100 x * 20 9, 50 y * 20 9); } void DrawPlay(int x, int y) { setcolor(4); circle(100 x * 20, 50 y * 20, 7); switch (Playone.direction) { case 1:line(100 x * 20, 50 y * 20, 100 x * 20, 50 y * 20 - 9); break; case 2:line(100 x * 20, 50 y * 20, 100 x * 20 9, 50 y * 20); break; case 3:line(100 x * 20, 50 y * 20, 100 x * 20, 50 y * 20 9); break; case 4:line(100 x * 20, 50 y * 20, 100 x * 20 - 9, 50 y * 20); break; } } void DrawAmy(int x, int y, int i) { if (amy[i].color == 12) setcolor(12); else if (amy[i].color == 13) setcolor(13); else setcolor(14); circle(100 x * 20, 50 y * 20, 7); switch (amy[i].direction) { case 1:line(100 x * 20, 50 y * 20, 100 x * 20, 50 y * 20 - 9); break; case 2:line(100 x * 20, 50 y * 20, 100 x * 20 9, 50 y * 20); break; case 3:line(100 x * 20, 50 y * 20, 100 x * 20, 50 y * 20 9); break; case 4:line(100 x * 20, 50 y * 20, 100 x * 20 - 9, 50 y * 20); break; } } void Score() { char s[10]; Playone.score = 10; sprintf(s, "%d", Playone.score); setfillstyle(SOLID_FILL, 0); bar(550, 100, 640, 130); settextstyle(0, 0, 2); setcolor(YELLOW); outtextxy(550, 115, s); } void DrawMap() { int i, j, k; for (i = 0; i<20; i ) { for (j = 0; j<20; j ) if (map[i][j] == 1) DrawTone(j, i); else if (map[i][j] == 2) DrawBrick(j, i); else if (map[i][j] == 3) DrawWater(j, i); else if (map[i][j] == 5) DrawHome(j, i); else if (map[i][j] == 8) { Playone.x = i; Playone.y = j; Playone.direction = 1; DrawPlay(j, i); for (k = 0; k<5; k ) Playone.fire[k].direction = -1; } else if (map[i][j] == 9) { amy[0].x = 1; amy[0].y = 1; amy[0].direction = amy[0].directiontwo = 3; amy[0].color = 12; DrawAmy(j, i, 0); } } for (i = 1; i<5; i ) amy[i].direction = amy[i].fire.direction = -1; outtextxy(210, 450, "Edit By www.dotcpp.com"); settextstyle(0, 0, 2); setcolor(9); outtextxy(525, 80, "Score"); setcolor(YELLOW); outtextxy(550, 115, "0"); } void far interrupt NewInt9(void) { unsigned char ScanCode, temp; ScanCode = inportb(0x60); temp = inportb(0x61); outportb(0x61, temp | 0x80); outportb(0x61, temp & 0x7f); if (ScanCode & 0x80) { ScanCode &= 0x7f; key_state[ScanCode] = 0; } else { key_state[ScanCode] = 1; key_pressed[ScanCode] = 1; } outportb(0x20, 0x20); } void InstallKeyboard(void) { int i; for (i = 0; i<128; i ) key_state[i] = key_pressed[i] = 0; OldInt9Handler = getvect(9); setvect(9, NewInt9); } void ShutDownKeyboard(void) { setvect(9, OldInt9Handler); } int GetKey(int ScanCode) { int res; res = key_state[ScanCode] | key_pressed[ScanCode]; key_pressed[ScanCode] = 0; return res; } void GameOver() { setcolor(0); setfillstyle(SOLID_FILL, 0); fillellipse(100 9 * 20, 50 18 * 20, 9, 9); nosound(); setcolor(RED); settextstyle(0, 0, 4); outtextxy(150, 5, "GAME OVER"); while (1) { if (GetKey(KEY_ESC)) break; } } void GamePlay() { int i, j, lose = 0; int t = 0; randomize(); while (1) { for (i = 0; i<5; i ) { if (amy[i].fire.direction>0) putpixel(100 amy[i].fire.y * 20, 50 amy[i].fire.x * 20, 11); } for (i = 0; i <= 4; i ) { if (Playone.fire[i].direction>0) putpixel(100 Playone.fire[i].y * 20, 50 Playone.fire[i].x * 20, 11); } TimeDelay(500000); for (i = 0; i<5; i ) { if (amy[i].fire.direction>0) putpixel(100 amy[i].fire.y * 20, 50 amy[i].fire.x * 20, 0); } for (i = 0; i <= 4; i ) { if (Playone.fire[i].direction>0) putpixel(100 Playone.fire[i].y * 20, 50 Playone.fire[i].x * 20, 0); } for (i = 0; i <= 4; i ) { if (Playone.fire[i].direction<0) continue; if (Playone.fire[i].direction == 1) { Playone.fire[i].x--; Playone.fire[i].y = Playone.fire[i].y; } else if (Playone.fire[i].direction == 2) { Playone.fire[i].y ; Playone.fire[i].y = Playone.fire[i].y; } else if (Playone.fire[i].direction == 3) { Playone.fire[i].x ; Playone.fire[i].y = Playone.fire[i].y; } else if (Playone.fire[i].direction == 4) { Playone.fire[i].y--; Playone.fire[i].y = Playone.fire[i].y; } if (map[Playone.fire[i].x][Playone.fire[i].y] == 1) Playone.fire[i].direction = -1; if (map[Playone.fire[i].x][Playone.fire[i].y] == 2) { Playone.fire[i].direction = -1; DrawBlack(Playone.fire[i].y, Playone.fire[i].x); map[Playone.fire[i].x][Playone.fire[i].y] = 0; } if (map[Playone.fire[i].x][Playone.fire[i].y] == 5) { lose = 1; break; } for (j = 0; j<5; j ) { if (amy[j].direction<0) continue; if (amy[j].x == Playone.fire[i].x&&amy[j].y == Playone.fire[i].y) { Playone.fire[i].direction = -1; DrawBlack(Playone.fire[i].y, Playone.fire[i].x); map[Playone.fire[i].x][Playone.fire[i].y] = 0; amy[j].fire.direction = amy[j].direction = -1; Score(); } } } for (i = 0; i<5; i ) { if (amy[i].direction<0 || amy[i].fire.direction<0) continue; if (amy[i].fire.direction == 1) { amy[i].fire.x--; amy[i].fire.y = amy[i].fire.y; } else if (amy[i].fire.direction == 2) { amy[i].fire.y ; amy[i].fire.x = amy[i].fire.x; } else if (amy[i].fire.direction == 3) { amy[i].fire.x ; amy[i].fire.y = amy[i].fire.y; } else if (amy[i].fire.direction == 4) { amy[i].fire.y--; amy[i].fire.x = amy[i].fire.x; } if (map[amy[i].fire.x][amy[i].fire.y] == 1) amy[i].fire.direction = -1; if (map[amy[i].fire.x][amy[i].fire.y] == 2) { amy[i].fire.direction = -1; DrawBlack(amy[i].fire.y, amy[i].fire.x); map[amy[i].fire.x][amy[i].fire.y] = 0; } if (map[amy[i].fire.x][amy[i].fire.y] == 5) { lose = 1; break; } if (amy[i].fire.x == Playone.x&&amy[i].fire.y == Playone.y) { for (j = 0; j<5; j ) Playone.fire[j].direction = -1; amy[i].fire.direction = -1; DrawBlack(amy[i].fire.y, amy[i].fire.x); map[amy[i].fire.x][amy[i].fire.y] = 0; lose = 1; break; } } nosound(); for (i = 0; i<5; i ) { if (amy[i].direction<0) continue; while (1) { amy[i].directiontwo = random(4) 1; if (amy[i].direction == 1 && amy[i].directiontwo == 3) continue; if (amy[i].direction == 3 && amy[i].directiontwo == 1) continue; if (amy[i].direction == 2 && amy[i].directiontwo == 4) continue; if (amy[i].direction == 4 && amy[i].directiontwo == 2) continue; if (amy[i].directiontwo == 3 && (map[amy[i].x 1][amy[i].y] == 3 || map[amy[i].x 1][amy[i].y] == 1 || map[amy[i].x 1][amy[i].y] == 2)) continue; if (amy[i].directiontwo == 1 && (map[amy[i].x - 1][amy[i].y] == 3 || map[amy[i].x - 1][amy[i].y] == 1 || map[amy[i].x - 1][amy[i].y] == 2)) continue; if (amy[i].directiontwo == 2 && (map[amy[i].x][amy[i].y 1] == 3 || map[amy[i].x][amy[i].y 1] == 1 || map[amy[i].x][amy[i].y 1] == 2)) continue; if (amy[i].directiontwo == 4 && (map[amy[i].x][amy[i].y - 1] == 3 || map[amy[i].x][amy[i].y - 1] == 1 || map[amy[i].x][amy[i].y - 1] == 2)) continue; DrawBlack(amy[i].y, amy[i].x); amy[i].direction = amy[i].directiontwo; if (amy[i].direction == 1) { amy[i].x--; amy[i].y = amy[i].y; } if (amy[i].direction == 3) { amy[i].x ; amy[i].y = amy[i].y; } if (amy[i].direction == 2) { amy[i].y ; amy[i].x = amy[i].x; } if (amy[i].direction == 4) { amy[i].y--; amy[i].x = amy[i].x; } if (amy[i].x == Playone.x&&amy[i].y == Playone.y) lose = 1; if (map[amy[i].x][amy[i].y] == 5) lose = 1; DrawAmy(amy[i].y, amy[i].x, i); if (amy[i].fire.direction<0) amy[i].fireplay = random(4); if (amy[i].fireplay == 1 && amy[i].fire.direction<0) { amy[i].fire.direction = amy[i].direction; amy[i].fire.x = amy[i].x; amy[i].fire.y = amy[i].y; } break; } } if (lose) { GameOver(); break; } if (GetKey(KEY_ESC)) break; if (GetKey(KEY_UP)) { if (Playone.direction == 1 && map[Playone.x - 1][Playone.y] != 1 && map[Playone.x - 1][Playone.y] != 2) { if (map[Playone.x - 1][Playone.y] == 3) continue; DrawBlack(Playone.y, Playone.x); Playone.x--; Playone.direction = 1; DrawPlay(Playone.y, Playone.x); } else { DrawBlack(Playone.y, Playone.x); Playone.direction = 1; DrawPlay(Playone.y, Playone.x); } } else if (GetKey(KEY_DOWN)) { if (Playone.direction == 3 && map[Playone.x 1][Playone.y] != 1 && map[Playone.x 1][Playone.y] != 2) { if (map[Playone.x 1][Playone.y] == 3) continue; DrawBlack(Playone.y, Playone.x); Playone.x ; Playone.direction = 3; DrawPlay(Playone.y, Playone.x); } else { DrawBlack(Playone.y, Playone.x); Playone.direction = 3; DrawPlay(Playone.y, Playone.x); } } if (GetKey(KEY_RIGHT)) { if (Playone.direction == 2 && map[Playone.x][Playone.y 1] != 1 && map[Playone.x][Playone.y 1] != 2) { if (map[Playone.x][Playone.y 1] == 3) continue; DrawBlack(Playone.y, Playone.x); Playone.y ; Playone.direction = 2; DrawPlay(Playone.y, Playone.x); } else { DrawBlack(Playone.y, Playone.x); Playone.direction = 2; DrawPlay(Playone.y, Playone.x); } } if (GetKey(KEY_LEFT)) { if (Playone.direction == 4 && map[Playone.x][Playone.y - 1] != 1 && map[Playone.x][Playone.y - 1] != 2) { if (map[Playone.x][Playone.y - 1] == 3) continue; DrawBlack(Playone.y, Playone.x); Playone.y--; Playone.direction = 4; DrawPlay(Playone.y, Playone.x); } else { DrawBlack(Playone.y, Playone.x); Playone.direction = 4; DrawPlay(Playone.y, Playone.x); } } if (GetKey(KEY_SPACE)) { for (i = 0; i<5; i ) if (Playone.fire[i].direction<0) { sound(300); Playone.fire[i].direction = Playone.direction; Playone.fire[i].x = Playone.x; Playone.fire[i].y = Playone.y; break; } } if (map[Playone.x][Playone.y] == 5) lose = 1; for (i = 0; i<5; i ) { if (amy[i].direction<0) continue; if (amy[i].x == Playone.x&&amy[i].y == Playone.y) lose = 1; } if (lose) { GameOver(); break; } t ; if (t == 30) { t = 0; for (i = 0; i<5; i ) if (amy[i].direction<0) { amy[i].direction = amy[i].directiontwo = 3; amy[i].x = 1; amy[i].y = random(3); if (amy[i].y == 0) amy[i].y = 1; else if (amy[i].y == 1) amy[i].y = 9; else amy[i].y = 18; amy[i].color = random(3) 12; DrawAmy(amy[i].y, amy[i].x, i); break; } } } }