C语言实现飞机大战小游戏完整代码

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

这个是注册页面规范:

这个是登入页面:

游戏菜单: 

飞机大战页面: 

话不多说,直接上代码

以下是源代码 

#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; //宽为50
    score=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语言实现飞机大战小游戏完整代码的文章就介绍到这了,更多相关C语言飞机大战小游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言版飞机大战游戏

    C语言版飞机大战,供大家参考,具体内容如下 不多说直接上代码 #include<iostream> #include<windows.h> #include<conio.h> #include<time.h> #include<string> using namespace std; /*=============== all the structures ===============*/ typedef struct Frame { COOR

  • C语言之飞机大战游戏

    本文实例为大家分享了C语言之飞机大战游戏的具体代码,供大家参考,具体内容如下 技术原型 1.void gotoxy(int x, int y) 函数,该函数可以使光标去到(x,y)的位置进行打印: 2.链表,用于存储状态: 3.windows.h中有非阻塞输入,_kbhit(): 4.随机生成数: 5.视觉暂留: 6.碰撞检测: 7.清屏函数: 8.设置边界: 技术路线 1.设置一个边界: 2.维护一个子弹的列表: 3.维护一个敌机的列表: 4.初始化飞机的位置: 5.每隔一秒钟生成一架敌机,生

  • C语言代码实现飞机大战

    本文实例为大家分享了C语言实现简单飞机大战的具体代码,供大家参考,具体内容如下 这个游戏的功能很单一,也就是"飞机大战",哈哈哈哈.总共只有300多行代码左右,你也可以想想它会有多简陋,把它复制下来编译一下可以直接执行,需要的同学可以自取~ PS:我运行的环境是 dev c++,前提你要在C99的环境中执行 以下是源代码 #include<stdio.h> #include<stdio.h> #include<windows.h> //将用户从键盘获

  • C语言控制台实现字符飞机大战

    本文实例为大家分享了C语言实现字符飞机大战的具体代码,供大家参考,具体内容如下 先看看效果吧 大一的时候做的,当时没有好的代码习惯,所以代码有点乱,代码直接复制就能用了,功能可以自行拓展. 代码: #include <stdio.h> #include <stdlib.h> #include <conio.h> int main () { int life=6;//生命 int i,j/*循环*/,plane_x,plane_y/*飞机所在坐标*/,a; plane_x

  • C语言实现简单飞机大战

    本文实例为大家分享了C语言实现飞机大战的具体代码,供大家参考,具体内容如下 定义四个函数实现飞机大战 #include<stdio.h> #include<windows.h> #include<conio.h> //定义全局变量 int high,width; //定义边界 int position_x,position_y; //飞机位置 int bullet_x,bullet_y; //子弹位置 int enemy_x,enemy_y; int score; in

  • C语言实现飞机大战小游戏完整代码

    大一课设做的飞机大战,可以进行登入和注册,这个是利用单链表做的,源代码已经给出,这个是最基本的飞机大战模式,我设置了几个功能,比如排行榜之类的.排行榜是用结构体数组做的,已及冒泡排序,并且在文件里保存信息.比较简单. 这个是注册页面规范: 这个是登入页面: 游戏菜单:  飞机大战页面:  话不多说,直接上代码 以下是源代码  #include"stdio.h" #include"windows.h" //用于获取窗口的句柄与屏幕控制 #include"co

  • C语言实现飞机大战小游戏

    本文实例为大家分享了C语言实现飞机大战小游戏的具体代码,供大家参考,具体内容如下 技术原型 1.void gotoxy(int x, int y) 函数,该函数可以使光标去到(x,y)的位置进行打印:2.链表,用于存储状态:3.windows.h中有非阻塞输入,_kbhit():4.随机生成数:5.视觉暂留:6.碰撞检测:7.清屏函数:8.设置边界: 技术路线 1.设置一个边界:2.维护一个子弹的列表:3.维护一个敌机的列表:4.初始化飞机的位置:5.每隔一秒钟生成一架敌机,生成位置x坐标随机,

  • C语言实现经典扫雷小游戏完整代码(递归展开 + 选择标记)

    目录 游戏介绍 游戏整体框架 游戏具体功能及实现 1.雷盘的定义 2.雷盘的初始化 3.布置雷 4.排查雷 5.递归式展开一片 6.获取周围雷的个数 7.标记特定位置 8.打印雷盘 游戏完整代码 1.test.c 2.game.h 3.game.c 游戏效果展示 大家好,今天我们将一起用C语言实现一个经典小游戏 – 扫雷,Let is go ! 游戏介绍 扫雷游戏相信大家都玩过,上图就是一个网页版的扫雷,它的规则是玩家选择一个方格,若此方格没有地雷,那么该方格会显示与它相邻的八个方格中雷的个数,

  • 基于Java语言在窗体上实现飞机大战小游戏的完整步骤

    目录 小组项目 模块需求描述 总体开发思想 功能实现 1.登录与结束界面 2.播放音乐 3.子弹 运行测试 登陆界面 发射子弹 总结 小组项目 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程序后,出现一个窗体,在窗体上用鼠标控制英雄机的移动,通过子弹打击敌机进行分数的计算,以及英雄机血量的计算等. 主要模块:登陆界面.音乐.子弹.敌机.英雄机.背景图.结束界面.BOSS 机.分数计算.血量计算. 负责模块:登陆界面.音乐.子弹.结束界面. 模块需求描述 登陆界面:运行程序后,弹出

  • java实战之飞机大战小游戏(源码加注释)

    一.工程文件 二.Main.java 主函数,实现类 package ui; //主函数实现 public class Main { public static void main(String[] args) { //创建窗体 GameFrame frame = new GameFrame(); //创建面板 GamePanel panel = new GamePanel(frame); //调用开始游戏的方法启动游戏 panel.action(); //将面板加入到窗体中 frame.add

  • 用JS实现飞机大战小游戏

    本文实例为大家分享了JS实现飞机大战小游戏的具体代码,供大家参考,具体内容如下 小的时候玩的飞机大战感觉还蛮神奇,今天自己就学着做了一个 先制作好要做好的几步以及背景样式 var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var start = 0; // 开始阶段 var starting = 1; // 开始的加载阶段 var running =

  • 原生JS实现飞机大战小游戏

    本文实例为大家分享了JS实现飞机大战小游戏的具体代码,供大家参考,具体内容如下 <html> <head> <title> 飞机大战 </title> <style type="text/css"> *{margin:0;padding:0;font-family:"Microsoft yahei"} body{overflow:hidden;;} </style> </head>

  • javascript实现简单飞机大战小游戏

    本文实例为大家分享了javascript实现飞机大战小游戏的具体代码,供大家参考,具体内容如下 效果图 html文件 <!DOCTYPE html><html lang='zh'><head>    <meta charset='UTF-8'>    <title>mm</title>    <link rel="stylesheet" href="./css/index.css">

  • Vue实现飞机大战小游戏

    目录 使用 Vue 开发一个简略版的飞机大战小游戏 一.实现思路 二.所需知识点 三.实现步骤 使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,你决定小试身手开发一个飞机大战小游戏.功能: 开始游戏前用户名必填,玩家可以发射子弹,敌军与行星随机出现,鼠标可操控玩家移动,敌军可发射子弹 一.实现思路 如题所述: 玩家可操控玩家飞机可发射子弹,敌军与行星随机生成: 这意味着我们需要一个单独的玩家飞机dom,以及敌军.行星与子弹 用 vue 循环生成的3

  • C++基于EasyX框架实现飞机大战小游戏

    正式使用Easyx之前,你需要先安装他!! EasyX 2022 版 (2022-9-1 更新) - EasyX 选择合适的版本安装 安装结束后就可以开始敲代码啦! 这里作者使用的是Visual Studio 2022所以安装EasyX_20220901版本 启动Visual Studio 2022,新建一个空项目 这是工程目录: 首先来看看Bullet(子弹)类 头文件: #pragma once class Bullet { public: Bullet(int x, int y, int

随机推荐