C语言实现射击小游戏

以下是一个简单的C语言射击小游戏的实现示例。这个游戏中,玩家控制一个飞船,敌方飞船会随机出现并向玩家移动。如果玩家的飞船与敌方飞船相撞,玩家就失去一条生命,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define WIDTH 10
#define HEIGHT 5
#define ENEMY_SHIP 'E'
#define PLAYER_SHIP 'S'
#define BULLET '|'
 
char game_field[HEIGHT][WIDTH + 1];
int player_ship_x = WIDTH / 2;
int enemy_ship_x = -1;
int enemy_ship_y = -1;
int bullet_x = -1;
int bullet_y = -1;
int lives = 3;
 
void draw_game_field() {
    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            if (j == player_ship_x && i == bullet_y) {
                printf("%c", BULLET);
            } else if (j == player_ship_x && i == 0) {
                printf("%c", PLAYER_SHIP);
            } else if (j == enemy_ship_x && i == enemy_ship_y) {
                printf("%c", ENEMY_SHIP);
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
    printf("Lives: %d\n", lives);
}
 
void move_enemy_ship() {
    if (enemy_ship_x < WIDTH - 1) {
        enemy_ship_x++;
    } else {
        enemy_ship_y++;
        enemy_ship_x = 0;
    }
    if (enemy_ship_y == HEIGHT) {
        enemy_ship_y = 0;
    }
}
 
void move_bullet() {
    if (bullet_x > 0) {
        bullet_x--;
    } else {
        bullet_x = player_ship_x;
        bullet_y = -1;
    }
}
 
void handle_collisions() {
    if (bullet_x == enemy_ship_x && bullet_y == enemy_ship_y) {
        bullet_x = player_ship_x;
        bullet_y = -1;
        enemy_ship_x = -1;
        enemy_ship_y = -1;
        lives--;
    }
}
 
void game_loop() {
    srand(time(0));
    while (lives > 0) {
        draw_game_field();
        move_enemy_ship();
        move_bullet();
        handle_collisions();
        if (enemy_ship_x != -1 && enemy_ship_y != -1) {
            draw_game_field();
            char input = getchar();
            if (input == 'a') {
                if (player_ship_x > 0) {
                    player_ship_x--;
                }
            } else if (input == 'd') {
                if (player_ship_x < WIDTH - 1) {
                    player_ship_x++;
                }
            } else if (input == 'w') {
                bullet_y = player_ship_x;
                bullet_x = player_ship_x;
            }
        }
    }
}
 
int main() {
    game_loop();
    printf("Game Over\n");
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.1-编程语言是什么

编程语言是什么 正式学习 Python 之前&#xff0c;我们有必要先搞清楚【编程语言】这个概念。 在我们很小的时候&#xff0c;父母就教我们开口说话&#xff0c;也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习&#xff0c;我们在不知不觉中学会了说话&#xff0…

软件推荐 篇三十七:安卓软件推荐IP Tools「IP工具」:全面解析网络状态与管理的必备神器

引言&#xff1a; 随着互联网的普及&#xff0c;网络已经成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;我们都需要通过网络来进行各种操作。然而&#xff0c;网络问题的出现往往会给我们带来诸多困扰。为了更好地管理和优化网络&#xff0c;我们…

SunFMEA冠翔(台山)工业FMEA培训会圆满结束

近日&#xff0c;SunFMEA软件成功在冠翔&#xff08;台山&#xff09;工业有限公司举办了为期三天的FMEA软件系统培训&#xff0c;通过重要知识讲解、现场答疑、演练互动、软件实操等环节&#xff0c;把培训氛围推向高潮。 ​ 此次培训分为DFMEA与PFMEA两部分&#xff0c;按照七…

LiveGBS流媒体平台GB/T28181常见问题-如何订阅设备状态在线离线状态redis订阅设备或是通道状态subscribe device操作及示例

LiveGBS如何订阅设备状态在线离线状态redis订阅设备或是通道状态subscribe device操作及示例 1、如何监听设备状态2、device订阅2.1、设备上线消息2.2、设备离线消息2.2、通道上线消息2.2、通道离线消息 3、订阅示例3.1、连接REDIS3.2、订阅device示例3.3、设备上线示例3.3.1、…

Oracle数据库进行sql优化的思路和方法

1. 查询语句优化 精简SQL: 避免使用 SELECT *&#xff0c;只选择需要的列&#xff0c;减少数据传输量。避免NOT IN 和 NOT EXISTS: 当可行时&#xff0c;改用 LEFT JOIN 或其他形式的查询&#xff0c;因为NOT IN和NOT EXISTS往往导致全表扫描或较差的执行计划。避免在WHERE子句…

binary.write 和 binary.read

golang中encoding/binary包 1、golang包中的binary包是什么&#xff1f; 2、binary为我们开发者提供了哪些内容&#xff1f;以及怎么使用&#xff1f; 3、编解码有哪几种方法&#xff1f; 转化成二进制格式与原本数据转字符串相比会更节省空间 一、golang包中的binary包是什…

用DevOpsGPT 5分钟开发一个网页小游戏

前言&#xff1a; 今天教大家如何制作一个简易的网页小游戏&#xff0c;步骤很简单&#xff0c;我们只需要用到一个智能开发软件&#xff0c;即可自动帮助我们完成开发。话不多说&#xff0c;接下来&#xff0c;我们直接上教程&#xff01; ​ 官网&#xff1a;KUAFUAI - AI 驱…

ESP32通过USB/UART/ble/其他协议OTA报错解决

1、乐鑫官方例程 ESP32的OTA 例程是基于HTTP接口&#xff0c;需要连接WIFI和HTTP服务器&#xff0c;使用上不是很灵活&#xff0c;根据ESP32 idf component OTA相关API接口&#xff0c;理论上可以通过任何通信方式和协议进行升级&#xff0c;只要保证文件传输准确、flash空间足…

基于Matlab的视频人体动作识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

智过网:一级建造师必须两年考过吗?有效期多久?

在建筑行业&#xff0c;一级建造师的职业资格证书是众多从业者追求的目标。然而&#xff0c;获得这一证书并非易事&#xff0c;它要求考生不仅具备扎实的专业知识&#xff0c;还需要在限定的时间内完成所有科目的考试。那么&#xff0c;一级建造师是否必须在两年内考完所有科目…

Guided Filter算法详解

论文地址 代码实现 def Guidedfilter(im,p,r,eps):mean_I cv2.boxFilter(im,cv2.CV_64F,(r,r));mean_p cv2.boxFilter(p, cv2.CV_64F,(r,r));mean_Ip cv2.boxFilter(im*p,cv2.CV_64F,(r,r));cov_Ip mean_Ip - mean_I*mean_p;# cov(x, y) E[XY] - E[X]E[Y]mean_II cv2.…

MySQL系统参数配置实战:生产环境优化

引言&#xff1a; MySQL作为广泛应用的关系型数据库&#xff0c;其系统参数配置直接影响着数据库的性能、稳定性以及资源利用率。本文旨在深入探讨MySQL的核心系统参数&#xff0c;并提供一份面向生产环境的配置建议&#xff0c;以帮助运维人员更好地优化数据库性能&#xff0…

harmonyos:Socket连接

场景介绍 应用通过Socket进行数据传输&#xff0c;支持TCP和UDP两种协议。 接口说明 Socket连接主要由socket模块提供。具体接口说明如下表。 接口名 功能描述 constructUDPSocketInstance() 创建一个UDPSocket对象。 constructTCPSocketInstance() 创建一个TCPSocket对…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(文本滑动选择器弹窗)

根据指定的选择范围创建文本选择器&#xff0c;展示在弹窗上。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文&#xff0c;不可在UI上下文不明确的地方使用&#xf…

ArkTS编写的HarmonyOS原生聊天UI框架

简介 ChatUI&#xff0c;是一个ArkTS编写的HarmonyOS原生聊天UI框架&#xff0c;提供了开箱即用的聊天对话组件。 下载安装 ohpm install changwei/chatuiOpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考如何安装 OpenHarmony ohpm 包 接口和属性列表 接口列表 接…

day15-maven高级

1. 分模块设计与开发 步骤 创建 maven 模块 tlias-pojo&#xff0c;存放实体类。创建 maven 模块 tlias-utils&#xff0c;存放相关工具类。 <dependency><groupId>com.itheima</groupId><artifactId>tlias-pojo</artifactId><version>1.0…

线性表:关于链表(主要以单链表为例)的相关理解和应用

多清澈这天空 晴雨相拥 同心逐梦&#xff01; 坚守我信心 一路出众&#xff01;&#xff01; 首先&#xff0c;按照惯例&#xff0c;欢迎大家边听歌边观看本博客 ▶ 紫荆花盛开 (163.com)&#xff08;建议复制链接&#xff0c;浏览器打开&#xff0c;csdn打开太慢了&#x…

Error Lens插件

最近在看视频学习的时候&#xff0c;发现了一个我认为很好用的插件。 就是Error Lens&#xff0c;这个插件它能够以高亮、内联显示代码中的错误、警告和其他诊断信息&#xff0c;让开发者无需查看控制台或问题面板&#xff0c;就能在编辑代码的过程中直观地看到并快速定位到代码…

Java-Java基础学习(4)-多线程(2)

3.7. Lambda表达式 为什么要使用lambda表达式 避免匿名内部类定义过多&#xff1b;可以让代码看起来更简洁&#xff1b;去掉一堆没有意义的代码&#xff0c;只留下核心逻辑 属于函数式编程的概念&#xff0c;格式 (params) -> expression [表达式](params) -> statement…

【MySQL】存储过程、存储函数、触发器

目录 存储过程介绍技术背景存储过程的作用与优势存储过程跟自定义函数很像。它们的区别是&#xff1a; 存储过程的缺点存储过程的特性基本存储过程使用1.创建语法语法说明&#xff1a;使用案例1.创建获取新闻类别数量的存储过程2.创建获取指定新闻类别ID下新闻数量的存储过程 2…