#define __cplusplus
#undef UNICODE
#undef _UNICODE
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h> //动态内存分配
#include <time.h>
#include <windows.h>
#include <conio.h>
#include<easyx.h>
#include <graphics.h>
/*
雷霆战机
定义一个结构体,表示子弹属性
坐标
int x;
int y;
*/
//宏定义
#define WND_WIDTH 1000
#define WND_HEIGHT 800
//定义子弹结构体
typedef struct Node
{
int x;
int y;
struct Node* pnext; //指针域,存放下一个子弹的内存地址
}NODE; //int整形,NODE子弹类型 没有内存,类型
NODE* pZidan = NULL; //定义子弹头指针
NODE* pMine = NULL; //自己的飞机
NODE* pDiji = NULL; //敌机链表头指针
//创建链表
void CreateList()
{
//创建子弹的链表
pZidan = (NODE*)malloc(sizeof(NODE));
if (pZidan == NULL)
{
perror("shibai1e\n");
}
pZidan->x = 250;
pZidan->y = 250;
pZidan->pnext = NULL;
//创建飞机的链表
pMine = (NODE*)malloc(sizeof(NODE));
if (pMine == NULL)
{
perror("shibai1e\n");
}
pMine->x = 420;
pMine->y = 600;
pMine->pnext = NULL;
//创建敌方飞机的链表
pDiji = (NODE*)malloc(sizeof(NODE));
if (pDiji == NULL)
{
perror("shibai1\n");
}
pDiji->x = 0;
pDiji->y = 0;
pDiji->pnext = NULL;
}
//增加子弹
void AddNode(int flag)
{
if (flag == 0)
{
//1开辟内存
NODE* pnew = (NODE*)malloc(sizeof(NODE));
//填充数据
pnew->x = pMine->x + 60; //第一个子弹在屏幕 的地方
pnew->y = pMine->y - 10;
pnew->pnext = NULL;
//把新节点查出链表(头插)
pnew->pnext = pZidan->pnext;
pZidan->pnext = pnew;
}
else if (flag == 1)
{
}
}
//增加敌机
void AddNode_Diji()
{
//1开辟内存
NODE* pnew = (NODE*)malloc(sizeof(NODE));
//填充数据
pnew->x = rand() % (WND_WIDTH - 20); //第一个敌机在屏幕 的地方(去掉敌机宽度)
pnew->y = 0;
pnew->pnext = NULL;
//把新节点查出链表(头插)
pnew->pnext = pDiji->pnext;
pDiji->pnext = pnew;
}
void Shoot()
{
//敌机的两个零时指针
NODE* pdr = pDiji->pnext;
NODE* pdrpre = pDiji;
//子弹
NODE* pzd = pZidan->pnext;
NODE* pzdpre = pZidan;
while (pdr != NULL)
{
pzd = pZidan->pnext;
pzdpre = pZidan;
while (pzd != NULL)
{
if (pzd->x > pdr->x - 10 && pzd->x <= pdr->x + 50 &&
pzd->y >= pdr->y - 15 && pzd->y <= pdr->y + 15)
{
pzdpre->pnext = pzd->pnext;
free(pzd);
pdrpre->pnext = pdr->pnext;
free(pdr);
pdr = pDiji->pnext;
pdrpre = pDiji;
break;
}
else
{
pzd = pzd->pnext;
pzdpre = pzdpre->pnext;
}
}
if (pdr != NULL) //若已经为NULL就结束
pdr = pdr->pnext;
if (pdr != NULL) //若已经为NULL就结束
{
pdrpre = pdrpre->pnext;
}
}
}
int main(void)
{
char key; //按键的输入
DWORD t1, t2, tt1, tt2;
IMAGE image_zidan1, image_zidan2; //定义存放子弹的变量
IMAGE image_diji1, image_diji2; //定义存放敌机的变量
IMAGE image_bcground; //定义背景变量
IMAGE image_mephon1, image_mephon2; //定义自己飞机
//将图片加载进来 (自己的图片路径)
loadimage(&image_zidan1, TEXT("zidanym.jpg"), 25, 30);
loadimage(&image_zidan2, TEXT("zidan.jpg"), 25, 30);
//将敌机加载进来
loadimage(&image_diji1, TEXT("dijiym.jpg"),80, 80);
loadimage(&image_diji2, TEXT("diji.jpg"), 80, 80);
//将我机加载进来
loadimage(&image_mephon1, TEXT("wojiym.jpg"), 150, 150);
loadimage(&image_mephon2, TEXT("woji.jpg"), 150, 150);
//将背景写进来
loadimage(&image_bcground, TEXT("beijing.jpg"), 1000, 800);
initgraph(WND_WIDTH, WND_HEIGHT); //做一个640,480的窗口
srand(time(NULL)); //随机数种子
CreateList(); //创建头节点
t1 = GetTickCount(); //获取,时间
tt1 = GetTickCount(); //获取,时间
while (1)
{
t2 = GetTickCount(); //获取,时间
tt2 = GetTickCount(); //获取,时间
if (t2 - t1 > 2000)
{
//不断来添加节点
AddNode_Diji(); //敌机
t1 = t2;
}
if (tt2 - tt1 > 200)
{
//不断来添加节点
AddNode(0); //子弹
tt1 = tt2;
}
BeginBatchDraw(); //开始批量绘图
cleardevice();
//显示背景
putimage(0, 0, &image_bcground);
//显示自己飞机宽50,高30
//roundrect(pMine->x, pMine->y, pMine->x + 50, pMine->y + 30, 50, 20);
putimage(pMine->x, pMine->y, &image_mephon1,SRCAND);
putimage(pMine->x, pMine->y, &image_mephon2, SRCPAINT);
//显示节点内容(子弹)
NODE* p = pZidan->pnext;
while (p != NULL)
{
//输出子弹图片
putimage(p->x, p->y, &image_zidan1,SRCAND);
putimage(p->x, p->y, &image_zidan2,SRCPAINT);
p->y -= 20; //y轴减少,子弹向上走
p = p->pnext;
}
//显示敌机
NODE* p_diji = pDiji->pnext;
while (p_diji != NULL)
{
//输出敌机图片
putimage(p_diji->x, p_diji->y, &image_diji1,SRCAND);
putimage(p_diji->x, p_diji->y, &image_diji2, SRCPAINT);
p_diji->y++;
p_diji = p_diji->pnext;
}
Sleep(25);
Shoot();
EndBatchDraw();
//按键控制飞机的位置pMine->x pMine->y
//如果没有按键输入
//判断是否有按键
if (_kbhit()) //kbhit()判断是否有按键,有返回1,否返回0
{
key = _getch(); //key获取按键内容
//上下左右wasd上下左右
switch (key)
{
case 119://上
pMine->y -= 10;
break;
case 115://下
pMine->y += 10;
break;
case 97://左
pMine->x -= 10;
break;
case 100://右
pMine->x += 10;
break;
default:
break;
}
}
}
getchar();
return 0;
}
Project3.zip
需积分: 0 100 浏览量
更新于2023-10-30
收藏 478KB ZIP 举报
"Project3.zip" 是一个压缩文件,通常用于存储和传输多个相关文件或文件夹。在IT领域,这种格式被广泛使用,因为它能够减少文件占用的磁盘空间,便于管理和分享大量的数据。
"Project3.zip" 的描述没有提供具体信息,但根据常规,一个名为“Project3”的项目可能包含一系列与软件开发、数据分析、网站构建或其他IT相关任务相关的文件。这些文件可能包括源代码、文档、资源文件、数据库、配置文件、报告等,它们共同构成了项目的一部分或全部内容。
虽然没有提供具体的标签,但我们可以基于“Project3.zip”来推测可能的标签,比如:“压缩文件”、“项目文件”、“数据存储”、“代码仓库”、“文件管理”。
【文件名称列表】: "Project3"
由于只给出了一个压缩文件的名称,我们无法得知压缩包内的具体文件结构。不过,可以假设“Project3”可能是一个包含所有项目文件的顶级文件夹,里面可能有以下常见的IT相关文件和文件夹:
1. **源代码文件**:如果这是一个软件开发项目,那么可能会包含各种编程语言(如Java, Python, C++, JavaScript)的源代码文件,这些文件通常以`.java`, `.py`, `.cpp`, `.js`等后缀结尾。
2. **资源文件**:项目可能包含图像、音频、视频等资源,这些文件可能是项目运行或展示所需,通常以`.jpg`, `.png`, `.mp3`, `.mp4`等格式存在。
3. **配置文件**:项目配置文件(如`.json`, `.xml`, `.ini`)用于设置程序的行为和环境,对于项目的正确运行至关重要。
4. **文档**:开发者可能创建了需求文档、设计文档、用户手册等,这些通常以`.docx`, `.pdf`, 或`.txt`格式存在。
5. **版本控制**:如果是使用Git进行版本控制的项目,可能会有一个`.git`目录,包含项目的历史版本信息。
6. **测试文件**:测试代码和测试用例(如`.test`或`.spec`文件)用于验证项目功能的正确性。
7. **编译或构建脚本**:`.bat`或`.sh`脚本可能用于自动化编译、打包或部署过程。
8. **许可证和README文件**:项目可能会包含LICENSE文件以规定使用条款,以及README文件来解释项目的基本信息和如何运行它。
9. **数据库文件**:如果项目涉及到数据库,可能会有数据库备份或配置文件(如`.sql`, `.db`, `.sqlite`)。
10. **第三方库和依赖**:项目可能依赖于其他库或框架,这些可能会以`.jar`, `.dll`, `.zip`, 或`.whl`等形式存储。
为了更深入地理解“Project3.zip”的内容,你需要解压文件并查看其内部结构。解压工具如WinRAR、7-Zip或系统自带的解压功能都可以实现。同时,根据项目的性质和文件类型,可能还需要特定的软件(如IDEs, 图像查看器,文本编辑器等)来打开和处理这些文件。在处理任何项目文件之前,确保遵循适当的权限和安全实践,以免破坏项目或引入潜在的安全风险。
2301_79920985
- 粉丝: 2
- 资源: 1
最新资源
- SQL语言详细教程:从基础到高级全面解析及实际应用
- 仓库管理系统源代码全套技术资料.zip
- 计算机二级考试详细试题整理及备考建议
- 全国大学生电子设计竞赛(电赛)历年试题及备考指南
- zigbee CC2530网关+4节点无线通讯实现温湿度、光敏、LED、继电器等传感节点数据的采集上传,网关通过ESP8266上传远程服务器及下发控制.zip
- 云餐厅APP项目源代码全套技术资料.zip
- vscode 翻译插件开发,选中要翻译的单词,使用快捷键Ctrl+Shift+T查看翻译
- mrdoc-alpine0.9.2
- ACMNOICSP比赛经验分享:从知识储备到团队协作的全面指南
- 云餐厅项目源代码全套技术资料.zip
- 基于STM32的数字闹钟系统的仿真和程序
- 混合信号设计中DEF文件创建流程
- 美国大学生数学建模竞赛(美赛)详细教程:从组队到赛后总结全攻略
- 病媒生物孳生地调查和治理工作方案.docx
- 保姆的工作标准.docx
- 病媒生物防制指南.docx