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

C 坦克射击小游戏

时间:2019-01-15 19:10:12      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:png   pre   nio   get   rpo   hit   position   左右   printf   

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <conio.h>
  4 #include <windows.h>
  5 #include <stdlib.h>
  6 #define MAX 100
  7 
  8 long long int speed=0;//控制敌机速度
  9 int position_x,position_y;//飞机的位置
 10 int high,width;//地图的大小
 11 int bullet_x,bullet_y;//子弹的位置
 12 int enemy_x,enemy_y;//敌人的位置
 13 int map[MAX][MAX];
 14 /*0表示空白,1表示战机的区域,2 表示敌人战机的位置。3表示上下围墙,4表示左右围墙,5表示子弹位置*/ 
 15 int score;
 16 void startup()//初始化所有信息
 17 {
 18     high =20;
 19     width =30;
 20     position_x=high/2;
 21     position_y=width/2;
 22     bullet_x=0;
 23     bullet_y=position_y;
 24     enemy_x=2;
 25     enemy_y=position_y-1;
 26     score=0;
 27 } 
 28 void startMap()
 29 {
 30     int i,j;
 31     for(i=1;i<=high-1;i++){
 32         map[i][1]=4;
 33         for(j=2;j<=width-1;j++){
 34             map[i][j]=0;
 35         }
 36             map[i][width]=4;
 37         }
 38         //下方围墙的初始化
 39         i=high;
 40         for (j=1;j<=width;j++){
 41             map[i][j]=3;
 42         }
 43             map[bullet_x][bullet_y]=5;
 44             /*这里是战机大小初始化开始*/
 45             map[position_x-1][position_y]=1;
 46             i=position_x;
 47             for(j=position_y-2;j<=position_y+2;j++){
 48                 map[i][j]=1;
 49             }
 50                 map[position_x+1][position_y-1]=1;
 51                 map[position_x+1][position_y+1]=1;
 52                 /*初始化结束*/
 53 
 54             /*敌人战机初始化*/
 55             map[enemy_x][enemy_y]=2;
 56             map[enemy_x-1][enemy_y-1]=2;
 57             map[enemy_x-1][enemy_y+1]=2;
 58             /*敌人战机初始化结束*/                    
 59             } 
 60             void HideCursor()//隐藏光标
 61             {
 62             CONSOLE_CURSOR_INFO cursor_info={1,0};
 63             SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
 64                  
 65 }
 66 void gotoxy(int x,int y){//清理一部分屏幕
 67             HANDLE handle =GetStdHandle(STD_OUTPUT_HANDLE);
 68             COORD pos;
 69             pos.X=x;
 70             pos.Y=y;
 71             SetConsoleCursorPosition(handle,pos);
 72         } 
 73 void updateWithoutInput()//与输入无关的更新
 74         {
 75         if(bullet_x>0)
 76             bullet_x--;
 77         if((bullet_x==enemy_x)&&(bullet_x==enemy_y))
 78         {
 79             //当敌人的飞机被击中时{
 80             score++;
 81             enemy_x=0;
 82             enemy_y=rand()%width;
 83             bullet_x=0;            
 84         
 85         }
 86          
 87         if(enemy_x>high){//当飞机超出区域 
 88             enemy_x=0;
 89             enemy_y=rand()%width; 
 90         }
 91         if(speed==1)
 92         {
 93             int i,j;
 94             for(i=1;i<=10000;i++){//用来控制敌机的速度
 95                 for(j=1;j<=1000;j++){
 96                     speed=1;
 97                     
 98                 } 
 99             }
100         }
101             speed=0;
102             if(speed==0){
103                 enemy_x++;
104                 speed=1;
105                 
106             }
107         }
108     
109 void updateWithInput()//与输入有关的更新
110         {
111         char input;
112         if(_kbhit()){//vc6.0为 _kbhit()
113             input=_getch();//vc6.0为_getch()
114             if(input==a){
115                 position_y--;
116             
117             }
118             if(input==s){
119                 position_x++;
120             
121             }
122             if(input==d){
123                 position_y++;
124             
125             }
126             if(input==w){
127                 position_x--;
128             
129             }  
130             if(input== ){
131                 bullet_x=position_x-1;
132                 bullet_y=position_y;
133                 
134             }
135             
136         } 
137     }
138 void show()//展示的内容
139     {
140         gotoxy(0,0);
141         int i,j;
142         for(i=1;i<=high;i++){
143             for(j=1;j<=width;j++){
144                 if(map[i][j]==0){
145                     printf(" ");
146                     
147                 }
148                 if(map[i][j]==1){
149                     printf("*");
150                     
151                 }
152                 if(map[i][j]==2){
153                     printf("#");
154                     
155                 }
156                 if(map[i][j]==3){
157                     printf("~");
158                     
159                 }
160                 if(map[i][j]==4){
161                     printf("|");
162                     
163                 }
164                 if(map[i][j]==5){
165                     printf("|");
166                     
167                 }
168             }
169                 printf("\n");
170                 
171             }
172             printf("\n你的得分:%d\n\n",score);
173             printf("操作说明:asdw分别操作 左下右上");
174             printf("\n**空格是发出子弹**\n");
175         } 
176     
177 int main()
178      {
179          startup();
180          while(1)
181          {
182              HideCursor();
183              startMap();
184              show();
185              updateWithoutInput();
186              updateWithInput();
187          }
188          return 0;
189      }

运行结果:
技术分享图片

 

C 坦克射击小游戏

标签:png   pre   nio   get   rpo   hit   position   左右   printf   

原文地址:https://www.cnblogs.com/Catherinezhilin/p/10273595.html

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