大一课设做的飞机大战,可以进行登入和注册,这个是利用单链表做的,源代码已经给出,这个是最基本的飞机大战模式,我设置了几个功能,比如排行榜之类的。排行榜是用结构体数组做的,已及冒泡排序,并且在文件里保存信息。比较简单。

搞清楚链表注册和登入问题的话,恭喜你单链表你已经掌握差不多了。我的另一篇文章专门介绍了链表的基本知识。https://blog.csdn.net/m0_62387059/article/details/122731940

这个是注册页面规范:

这个是登入页面:

游戏菜单: 

飞机大战页面: 

话不多说,直接上代码

以下是源代码 

#include"stdio.h"
#include"windows.h"    //用于获取窗口的句柄与屏幕控制
#include"conio.h"      //用于获取键盘输入的内容
#include"string.h"
#include"stdlib.h"
/*两个结构体*/
/*用于存用户信息*/
typedef struct usepeople
{char name[20];//用户名 char mm[20];//密码 usepeople *next;
}U;
/*输出历史记录*/
struct history
{char NAME[20];int SCORE;
}s[10];
//定义全局变量
int o;    //保存排行榜分数
char j[20];     //保存排行榜用户名
int h,w;   //定义画面的高和宽
int p_x,p_y;       // 定义我方飞机的位置
int e_x,e_y;       // 定义敌方飞机的位置
int b_x,b_y;       //定义子弹的位置
int score;         //得分
int f;              //定义飞机的状态
int num=1;          //控制排名的数量  (我设置的是8个)
void gotoxy(int x,int y);              //光标移动到(x,y)位置
void menu1(U *h,int num);                       //菜单功能
int color(int c);                       //更改文字颜色
void explation();                    //游戏右侧显示
void tip();                         //游戏说明
void seescore();                      //分数显示
void startup();                      //游戏初始化
void show();                        //显示游戏画面
void Fly();                         //定义函数来控制子弹和敌人的移动
void Planefly() ;                   //定义函数来控制飞机的移动和子弹的发射
void gameover(U *h);                  //设计游戏结束界面
U * createpeople(U *h);           //用于注册用户的信息
void create(U *h);                //建立第一个注册信息
void History(struct history s[],int num); //用于遍历输出挑战者信息
void insert(U *h);            //在结尾加入注册后的玩家账号
U* search(U *h,char *name);  //用于判断用户的用户名是否正确
void deletenum(U *h,char name[]);//注销用户信息
void iregister(U *h);        //注册页面
void dengru(U *h,int num);   //登入页面
void log_in(U *h);               //保存用户信息
void msort(history *a,int n);    //记录冒泡排序
int color(int c)
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);        //更改文字颜色return 0;
}
//注销用户信息
void deletenum(U *h,char name[])
{U *p=h->next;while(p&&strcmp(p->name,name)!=0){h=p;p=p->next;}if(p){h->next=p->next;free(p);}
}
/*设置光标的位置*/
void gotoxy(int x,int y)
{COORD c;c.X=x;c.Y=y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
/*光标的隐藏*/
void HideCursor()
{CONSOLE_CURSOR_INFO cursor_info = {1,0};//第二个值为0表示隐藏光标SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
/*进行冒泡排序*/
void msort(history *a,int n)
{for(int i=1;i<num;i++){for(int f=num;f>i;f--){if(s[f].SCORE>s[f-1].SCORE){o=a[f].SCORE;a[f].SCORE=a[f-1].SCORE;a[f-1].SCORE=o;strcpy(j,a[f].NAME);strcpy(a[f].NAME,a[f-1].NAME);strcpy(a[f-1].NAME,j);}}}
}
//用于遍历输出挑战者信息
void History(struct history s[],int num,U* h)
{system("cls");if(num==1){gotoxy(1,1);printf("你还没有记录");}for(int i=1;i<num;i++)   //这里的for是用来逐一输出每一个用户的数据 {gotoxy(15,3+2*i);printf("%d:用户名:%s   ",i,s[i].NAME);printf("得分:%d   ",s[i].SCORE);}gotoxy(1,28);printf("请注意最多保存8次记录");getch();system("cls");menu1(h,num);  //看完以后返回开始界面
}
//建立第一个注册信息
void create(U *h)
{U *p,*q=h;char name[20];printf("请输入用户名:\n");gotoxy(39,12);scanf("%s",name);while(strcmp(name,"OVER")){p=(U*)malloc(sizeof(U));strcpy(p->name,name);char mm[20];gotoxy(39,13);printf("请输入密码:(换行输入OVER结束)\n"); gotoxy(39,14);scanf("%s",mm);strcpy(p->mm,mm);q->next=p;q=p;gotoxy(39,15);scanf("%s",name);}q->next=NULL;
}U* search(U *h,char *name)
{while(h=h->next,h){if(!strcmp(h->name,name))  return h;}return NULL;
}U * createpeople(U *h)
{U *q;q=(U*)malloc(sizeof(U));
W:    printf("输入你要注册的用户名:\n");scanf("%s",q->name);if(search(h,q->name)) {system("cls");printf("该用户名已存在!!!\n");_getch();system("cls");goto W;}printf("输入你的密码:\n");scanf("%s",q->mm);q->next=NULL;return q;
}
//在结尾加入注册后的玩家账号
void insert(U *h)
{U *q,*temp;q=createpeople(h);while(h=h->next,h){if(h->next==NULL)break;}temp=h;q->next=temp->next;temp->next=q;
}
/*游戏说明*/
void tip()
{gotoxy(30,5);printf("w向上,s向下,a向左,d向右,按空格射击");gotoxy(30,10) ;printf("你击落一架敌机可得1分"); gotoxy(30,15);    printf("如果你被敌机撞上就会死亡");
}
void menu1(U *h,int num)                       //菜单功能
{int n;gotoxy(37,10);printf("飞 机 大 战"); gotoxy(15,20);printf("输入数字1:开始游戏") ;gotoxy(55,20);printf("输入数字2:查看规则");gotoxy(15,22);printf("输入数字3:查看挑战榜"); gotoxy(55,22);printf("输入数字4:退出游戏"); gotoxy(15,24);printf("输入数字5:注销账号");gotoxy(55,24);printf("输入数字6:请你签到"); gotoxy(37,25);printf("请输入你的选择:"); scanf("%d",&n);switch(n){case 1:{system("cls"); }break;case 2:{system("cls");tip(); printf("\n");gotoxy(30,17);printf("输入1 ,返回主页");int a=0; scanf("%d",&a);if(a==1) {system("cls");menu1(h,num);}}break;case 3:{History(s,num,h);    }break;case 4:{system("cls");printf("你确定要退出游戏吗?\n");printf("确定输入1,不确定输入2\n");int a=0;scanf("%d",&a);if(a==1)    exit(0);else {system("cls");menu1(h,num);}}break;case 5:{char name[20];system("cls");printf("输入要删除在帐号:");scanf("%s",name);deletenum(h,name);printf("输入1 ,返回主页");int a=0; scanf("%d",&a);if(a==1){system("cls");if(h->next==NULL){iregister(h);dengru(h,num);}else dengru(h,num);menu1(h,num);}    }break;case 6:{system("cls");log_in(h);gotoxy(42,12);printf("请输入任意键继续!!!\n");_getch();system("cls");menu1(h,num);}break;default:{gotoxy(37,25);printf("请看清楚条件\n");_getch();system("cls");menu1(h,num);}break;}
}
void startup()      //游戏初始化
{h=20; //高为20 w=50; //宽为50score=0; //得分初始化 f=1;  //飞机的状态p_x=w/2; //飞机x的位置 p_y=h-4; //飞机y的位置e_x=2+rand()%w-2;e_y=0; b_x=p_x;b_y=0;HideCursor();   //隐藏光标
}
/*显示游戏画面*/
void show()
{int i,j;for(i=0;i<h;i++){for(j=0;j<w;j++){if(f==0)     break;else{if((i==0)||(j==0)||(i==h-1)||(j==w-1))   printf("+");else if((i==p_y)&&(j==p_x))     printf("A");else if((i==b_y)&&(j==b_x))       printf("!");else if((i==e_y)&&(j==e_x))       printf("@");else printf(" ");}    }printf("\n");}if((p_x==e_x)&&(p_y==e_y))    f--;
}
/*分数显示  */
void seescore(int num)
{gotoxy(56,5);printf("w向上,s向下,a向左,d向右,按空格射击");gotoxy(56,7);printf("A为您的战机"); gotoxy(56,8);printf("@为敌机");gotoxy(2,21);printf("你的得分为%d",score);s[num].SCORE=score;
} /*用循环控制敌机的飞行速度*/
void Fly()
{static int speed=0;if(speed<10) speed++;if(speed==10)   {if(e_y<h)   e_y++;else { e_y=0;e_x=2+rand()%w-2;}speed=0;}
}
void b_Fly()
{if(b_y>0)     b_y--;//控制子弹的飞行效果 if((b_y==e_y)&&(b_x==e_x))      {score++;e_y=0;e_x=2+rand()%w-2;b_y=0;}
}
/*控制飞机的移动*/
void Planefly()
{char input;if(kbhit()) //kbhit函数是判断是否有输入 {input=getch(); //将输入的值传入input里面 if((input=='w')&&(p_y>1)) //如果按下wsad则相应移动飞机的位置 {p_y--;}if((input=='s')&&(p_y<h-2)){p_y++;}if((input=='a')&&(p_x>1)){p_x--;}if((input=='d')&&(p_x<w-2)){p_x++;}if((input==' ')&&(b_y==0)){b_x=p_x;b_y=p_y;}}
}
void gameover(U *h)//游戏结束提示
{system("cls");int a;gotoxy(39,14);printf("输入1继续打飞机,输入2结束游戏");scanf("%d",&a);switch(a){case 1:{system("cls");}break;case 2:{system("cls");exit(0);}break;default:{system("cls");printf("请看清楚要求!");_getch();gameover(h);}break;}
} /*登入与注册*/
void iregister(U *h)
{char name[20];char mm[20];gotoxy(51,6);    printf("注册") ;gotoxy(39,11);     create(h);//注册gotoxy(39,16);printf("注册成功!!!(按任意键登入)\n");HideCursor();_getch();system("cls");
}
void dengru(U *h,int num)
{char name[20];char mm[20];
o:  gotoxy(39,16);printf("请输入用户名:\n");gotoxy(39,17);scanf("%s",name);strcpy(s[num].NAME,name);//将用户名存入结构体数组 gotoxy(39,18);printf("请输入密码:\n");gotoxy(39,19);scanf("%s",mm);if(!search(h,name))  {system("cls");gotoxy(39,16);printf("没有该用户信息,请先注册!!!(按任意键继续)");_getch();system("cls") ;insert(h);system("cls"); goto o; }U *temp=search(h,name);//判断密码 if(strcmp(temp->mm,mm)) {system("cls");gotoxy(39,17);printf("密码错误,请重新输入!(按任意键继续)");_getch();system("cls") ;dengru(h,num);} else{gotoxy(39,20);printf("登入成功!!!(按任意键开始游戏)");_getch();system("cls");}
}
void log_in(U *h) {FILE*fp;char name[20];char time[20];if ((fp = fopen("d:\\informeation storage.txt", "a+")) == NULL) {printf("文件不存在,创建成功");}
M:    gotoxy(36,9);printf("为了为您的账号签到,请再次输入账号\n");gotoxy(42,10);scanf("%s", name);if(!search(h,name))  {gotoxy(42,11);printf("输入错误,请重新输入");_getch();system("cls");goto M;    }fputs(name, fp);gotoxy(36,11);printf("请输入登入的时间\n");gotoxy(42,12);scanf("%s", time);fputs(time, fp);fclose(fp);
}
int main ()
{system("mode con cols=100 lines=30");  //创建宽100高30的程序界面大小U *head=(U*)malloc(sizeof(U)); //建立一个带头的链表 iregister(head); L:dengru(head,num);menu1(head,num);startup();//初始化while(1){gotoxy(0,0);show();seescore(num);if(f==0)//判断飞机的状态 {gameover(head);s[num].SCORE=score;num++;if(num==10) num=1;msort(s,num+1);goto L;}b_Fly();Fly();Planefly(); }return 0;} 

飞机大战小游戏 C语言(课设任务)相关推荐

  1. C语言—飞机大战小游戏

    哈工大经典C语言大作业-飞机大战小游戏,源码如下,已经通过编译获得评分19+ (满分20)当时还是太菜了呜呜呜. 可以给大家参考一下,好像本来是加了音乐的,但是你们可能没有对应的音乐MP3文件,所以如 ...

  2. 基于Java语言在窗体上实现飞机大战小游戏

    全套资料下载地址:https://download.csdn.net/download/sheziqiong/85594271 项目介绍 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程 ...

  3. 用C语言实现飞机大战小游戏

    我的个人博客:谋仁·Blog 该项目已上传至GitHub:点击跳转 文章目录 摘要 运行环境 整体功能思维导图 效果预览 具体功能的实现 图形界面:EasyX EasyX图形库简介 EasyX图形库的 ...

  4. 【Java】Java基础飞机大战小游戏完整代码

    Java基础飞机大战小游戏完整代码 先来展示一下代码实现结果图 主函数ShootGame 初始化游戏原始背景图片,游戏人物图片,游戏开始结束图片:构建产生敌人算法:产生英雄机算法:发射子弹算法:判断是 ...

  5. 华为官方解析开源鸿蒙 OpenHarmony 3.1关键特性画布,教你如何完成飞机大战小游戏

    华为技术有限公司的江英杰为大家揭晓了关于开源鸿蒙 OpenHarmony 3.1 Beta 版中的一个关键特性,也就是 ArkUI 开发框架中的 canvas 画布. 据介绍,canvas 是 Ark ...

  6. Qt学习总结——飞机大战小游戏制作

    Qt学习总结--飞机大战小游戏制作 1. 需求分析 这篇文章写于2020年暑假,完成学校实训项目之后,对自己的项目实践做了一个总结,回顾整个项目的制作过程,同时也复习一下Qt的相关知识,总结项目制作过 ...

  7. canvas绘制“飞机大战”小游戏,真香

    canvas是ArkUI开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活.高效等优点,被广泛应用于UI界面开发中. 本期,我们将为大家介绍canvas组件的使用. 目录 一.canvas介 ...

  8. 【python】飞机大战小游戏练习

    飞机大战小游戏练习 一.前提准备 二.制作步骤 1.库的导入与初始化 2.窗口操作 3.键盘按键监听相关操作 4.添加游戏背景 5.加载玩家飞机 6.获取玩家飞机矩阵 三.完整代码编写 游戏背景类编写 ...

  9. python 飞机大战小游戏

    飞机大战小游戏,这里需要下载pygame模块 这是需要的素材,需要的自取: 上代码: import time import pygame from pygame.locals import *#检测事 ...

  10. 点击list view中一行内容可以在combox中显示_java版飞机大战小游戏详细教程(零基础小白也可以分分钟学会!)...

    一:游戏展示 飞机大战小游戏我们都玩过,通过移动飞机来打敌机,这里给大家展示一下游戏成果:呜呜呜由于gif只能上传5M大小,所以就不能给大家展示操作了,如果大家有兴趣可以自己自己做出来再玩哟. 这里面 ...

最新文章

  1. 详解TF-Ranking:Google开源的排序框架,应用于邮件检索、推荐系统等场景
  2. 常用 SQL 语句汇总
  3. Ehab and another construction problem(水题)
  4. . NET5实战千万高并发项目,性能吊打JAVA,C#排名万年老五,有望逆袭!
  5. Effective C++学习第九天
  6. sql server 2005 COUNT_BIG (Transact-SQL)
  7. 将Maven项目发布到Nexus私服
  8. 推荐几个2021年在Redis、Go和Rust领域异军突起的技术公众号
  9. 三星Galaxy Note 10再曝正面渲染图:居中前置摄像头更顺眼
  10. 【文献翻译】基于CVSS的IT系统网络安全风险定量评估方法-A Quantitative CVSS-Based Cyber Security Risk Assessment Methodology
  11. 黑苹果alc269声卡仿冒id_AppleALC仿冒声卡驱动alc269优化版(Lenovo Z580亲测)
  12. 花了一年时间开发的铣床数控系统NCStudioPro(支持钻孔,铣削,切割等铣床加工工艺)...
  13. 运行“travel[org.apache.tomcat.maven:tomcat7 maven plugin:2.1:run]时出错:未指定项目JDK
  14. 简约黑板擦特效表白网源码 附带wap自适应
  15. 苹果怎么安装未签名的app_Windows端超简单安装未签名ipa应用
  16. 使用Mybatis报错“Type interface com.test.mapper.UserMapper is not known to the MapperRegistry.“
  17. 【微信小程序|Demo】订单结算页面
  18. 经典的10句人生箴言
  19. 如何关闭计算机服务检测,交互式服务检测老是弹出来?Win7系统交互式服务检测怎么关闭方法...
  20. android一键清理任务,Android 一键清理、内存清理功能实现

热门文章

  1. Redis 安装说明
  2. 生成器(generator)理解
  3. vue.js毕业设计,基于vue.js前后端分离在线教育视频点播系统设计与实现(H5移动项目)
  4. SqlSession的使用范围
  5. Unity给小鳄鱼洗澡2D流体水实现
  6. 微信小程序--加载动画【水波涟漪效果】
  7. windows操作系统未关闭默认共享
  8. 阅读基地畅销榜数据抓取
  9. 清华社英语在线自动教程python版
  10. mysql源码及内核分析,MySQL · 源码阅读 · Secondary Engine