鱼C论坛

 找回密码
 立即注册
查看: 1814|回复: 2

[技术交流] 仅用4个函数写飞机大战----c语言

[复制链接]
发表于 2021-11-4 15:11:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 svsv 于 2021-11-4 15:13 编辑

仅定义4个函数写控制台飞机大战

  1. #include<stdio.h>
  2. #include<windows.h>
  3. #include<conio.h>
  4. //定义全局变量
  5. int high,width;                                                //定义边界
  6. int position_x,position_y;                        //飞机位置
  7. int bullet_x,bullet_y;                                //子弹位置
  8. int enemy_x,enemy_y;
  9. int score;
  10. int flag;                                                        //飞机状态
  11. void gotoxy(int x,int y)                          //光标移动到(x,y)位置
  12. {
  13.     HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
  14.     COORD pos;
  15.     pos.X = x;
  16.     pos.Y = y;
  17.     SetConsoleCursorPosition(handle,pos);
  18. }
  19. void HideCursor() // 用于隐藏光标
  20. {
  21.         CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二个值为0表示隐藏光标
  22.         SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
  23. }


  24. void startup()                                                //数据初始化
  25. {
  26.         high=18;
  27.         width=26;
  28.        
  29.         position_x=high-3;                               
  30.         position_y=width/2;
  31.        
  32.         bullet_x=0;
  33.         bullet_y=position_y;
  34.        
  35.         enemy_x=0;
  36.         enemy_y=position_y;
  37.        
  38.         score=0;
  39.        
  40.         flag=0;                                                        //飞机完好
  41.        
  42.         HideCursor();
  43. }
  44. void show()                                                        //显示界面
  45. {
  46.         int i,j;
  47.         for(i=0;i<high;i++)
  48.         {
  49.                 for(j=0;j<width;j++)
  50.                 {
  51.                         if(flag)
  52.                                 break;
  53.                          
  54.                         else if((i==position_x)&&(j==position_y))                //飞机坐标
  55.                                 printf("*");
  56.                         else if((i==enemy_x)&&(j==enemy_y))                                //敌机坐标
  57.                                 printf("*");
  58.                         else if((i==bullet_x)&&(j==bullet_y))                        //子弹坐标
  59.                                         printf("|");
  60.                         else if ((j==width-1)||(i==high-1)||(j==0)||(i==0))                                //打印边界
  61.                                 printf("#");
  62.                         else
  63.                                 printf(" ");
  64.                 }
  65.                 printf("\n");
  66.         }
  67.         printf("\n");
  68.         if((position_x==enemy_x)&&(position_y==enemy_y))
  69.         {
  70.                 flag=1;                                                        //飞机撞毁 游戏结束
  71.                 printf("得分: %d\n",score);
  72.                 printf("游戏结束");
  73.         }
  74.         else
  75.                 printf("得分: %d\n",score);
  76. }
  77. void withoutInpute()                                                //与用户输入无关
  78. {
  79.         if(bullet_x>0)                                                        //子弹上升效果
  80.                 bullet_x--;
  81.         if((bullet_x==enemy_x)&&(bullet_y==enemy_y))                //子弹命中敌机
  82.         {
  83.                 score++;
  84.                 bullet_x=-1;       
  85.                 enemy_x=1;
  86.                 enemy_y=2+rand()%width-2;
  87.         }       


  88.         static int speed;
  89.         if(speed<30)                                        //减慢敌机速度,不影响飞机和子弹速度
  90.                 speed++;
  91.         if(speed==30)
  92.         {
  93.                 if(enemy_x<high)
  94.                         enemy_x++;
  95.                 else
  96.                 {
  97.                         enemy_x=0;
  98.                         enemy_y=2+rand()%width-2;
  99.                 }
  100.                 speed=0;
  101.         }




  102. }
  103. void withInpute()                                                //与用户输入有关
  104. {
  105.         char input;
  106.         if(kbhit())                                                                                //控制飞机方向
  107.         {
  108.                 input=getch();
  109.                 if((input=='w')&&position_x>1)
  110.                         position_x--;       
  111.                 if((input=='s')&&position_x<high-2)
  112.                         position_x++;               
  113.                 if((input=='a')&&position_y>1)
  114.                         position_y--;       
  115.                 if((input=='d')&&position_y<width-2)
  116.                         position_y++;
  117.                 if(input==' ')
  118.                 {
  119.                         bullet_x=position_x-1;
  120.                         bullet_y=position_y;
  121.                 }
  122.         }
  123. }
  124. int main()
  125. {
  126.         system("color 2f");
  127.         startup();                                        // 数据初始化
  128.         while(1)                                        //  游戏循环执行
  129.         {
  130.                 gotoxy(0,0);
  131.                 show();                                        // 显示画面
  132.                 withoutInpute();                // 与用户输入无关的更新
  133.                 withInpute();                        // 与用户输入有关的更新
  134.         }
  135. }  
复制代码


别忘了评分支持下哦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-4 15:17:14 | 显示全部楼层
wasd 移动
空格 攻击
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 08:56:28 | 显示全部楼层
学习了,收藏
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 18:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表