关于写一个关于面向对象的小游戏

本文介绍了使用Python的pygame库开发面向对象小游戏的基础步骤,包括pygame模块初始化、创建主窗口、游戏循环、坐标系统、图像加载与绘制,以及游戏的退出方法。
摘要由CSDN通过智能技术生成

前言:

这是我之前做的一个关于面向对象的小游戏,接下来的几篇都是关于这个面向对象的小游戏,由于最近比较忙可能更新会比较慢一点,希望大家能够理解。由于这个是关于python的面向对象的小游戏,关于python的所以我用的编辑器是pycharm,如果需要下载pycharm的下期出个教程,有了pycharm之后是还需要下一个第三方库的pygame

可以直接windows键加R直接会出现命令提示符直接输入下面的代码

pip install pygame

(下载不好的话不要硬是用这个下载,可以试试下面的下载)

 pip install -i Simple Index pygame

下载好了之后我们就可以开启我们的游戏编码之路。

1.pygame的使用

1.1游戏的初始化

在使用pygame中所有的功能之前,需要调用init方法进行初始化,

import pygame  
pygame.init()

1.2创建游戏的主窗口

pygame.display用于创建和管理窗口

在初始化后,pygame.display.set_mode():用于初始化游戏的显示窗口

参数:以元组的形式传入窗口的宽和高

#创建游戏窗口
screen = pygame.display.set_mode((500, 700))

1.3游戏的循环:

在创建窗口后,你通常会进入一个游戏循环,在这个循环中处理事件、更新游戏状态并绘制游戏画面。

#游戏的循环
running = True  
while running:  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            running = False  
    pygame.display.update()

1.4游戏的退出

在游戏结束之前需要调用quit方法,当你想要结束游戏时,你可以调用pygame.quit()函数来卸载所有pygame模块。

pygame.quit()  

1.5游戏中的坐标:

坐标系:

圆点在左上角

x轴水平方向向右,逐渐增加

y轴垂直方向向下,逐渐增加

在游戏中,所有可见的元素都是以矩形区域来描述位置的,要描述一个矩形区域需要有四个要素:

x,y,宽,高

rect=pygame.Rect(x, y, width, height)
print(rect.x)
print(rect.y)
print(rect.width)
print(rect.height)

1.6 图像的绘制

图像文件初始保存在磁盘上,如果要使用:

  1. 加载到内存:pygame.image.load(图像地址)
  2. 绘制到屏幕上:调用blit方法
  3. 更新屏幕显示:pygame.display.update()

 

 

#绘制图像到屏幕上
#加载图像到内存
image_path = "path_to_your_image.png"  # 替换为你的图像文件路径  
#将图像绘制到指定位置
s.blit(img,(0,0))
#更新屏幕显示
pygame.display.update()

结语:今天就先写到这里后面的游戏代码我也会持续更新的,今天先浅浅认识一下这个,先制作出一个游戏窗口和初始化和退出.

好的,我可以为您提供一个基于C++面向对象小游戏打飞机的示例代码。以下是一个简单的实现方案: ```c++ #include <iostream> #include <vector> #include <time.h> #include <conio.h> #include <windows.h> using namespace std; const int WIDTH = 50; // 游戏窗口宽度 const int HEIGHT = 20; // 游戏窗口高度 const int ENEMY_NUM = 5; // 敌机数量 const int BULLET_NUM = 3; // 子弹数量 class GameObject { public: int x, y; // 物体的坐标 char shape; // 物体的形状 GameObject(int _x, int _y, char _shape) { x = _x; y = _y; shape = _shape; } virtual void show() = 0; // 显示物体 virtual void update() = 0; // 更新物体 virtual bool isCollide(GameObject& other) = 0; // 判断是否碰撞 }; class Plane : public GameObject { public: int life; // 飞机的生命值 int speed; // 飞机的速度 Plane(int _x, int _y, int _life, int _speed, char _shape) : GameObject(_x, _y, _shape), life(_life), speed(_speed) {} void show() override { cout << shape; } void update() override { if (_kbhit()) // 检测是否有按键按下 { char ch = _getch(); switch (ch) { case 'a': x--; break; case 'd': x++; break; case 'w': y--; break; case 's': y++; break; } } } bool isCollide(GameObject& other) override { if (x == other.x && y == other.y) { life--; return true; } return false; } }; class Enemy : public GameObject { public: int speed; // 敌机的速度 Enemy(int _x, int _y, int _speed, char _shape) : GameObject(_x, _y, _shape), speed(_speed) {} void show() override { cout << shape; } void update() override { y += speed; if (y >= HEIGHT - 1) // 敌机飞出窗口,回到顶部 { y = 0; x = rand() % WIDTH; } } bool isCollide(GameObject& other) override { if (x == other.x && y == other.y) { return true; } return false; } }; class Bullet : public GameObject { public: int speed; // 子弹的速度 Bullet(int _x, int _y, int _speed, char _shape) : GameObject(_x, _y, _shape), speed(_speed) {} void show() override { cout << shape; } void update() override { y -= speed; if (y < 0) // 子弹飞出窗口,销毁 { x = -1; y = -1; } } bool isCollide(GameObject& other) override { if (x == other.x && y == other.y) { x = -1; y = -1; return true; } return false; } }; class Game { public: Plane* plane; // 玩家控制的飞机 vector<Enemy*> enemies; // 敌机列表 vector<Bullet*> bullets; // 子弹列表 Game() { srand(time(NULL)); plane = new Plane(WIDTH / 2, HEIGHT - 2, 3, 1, 'A'); // 创建敌机 for (int i = 0; i < ENEMY_NUM; i++) { int x = rand() % WIDTH; int y = rand() % (HEIGHT / 2); int speed = rand() % 2 + 1; Enemy* enemy = new Enemy(x, y, speed, 'V'); enemies.push_back(enemy); } // 创建子弹 for (int i = 0; i < BULLET_NUM; i++) { Bullet* bullet = new Bullet(-1, -1, 2, '.'); bullets.push_back(bullet); } } ~Game() { delete plane; for (int i = 0; i < enemies.size(); i++) { delete enemies[i]; } for (int i = 0; i < bullets.size(); i++) { delete bullets[i]; } } void show() { system("cls"); // 清空控制台屏幕 // 显示飞机 plane->show(); // 显示敌机 for (int i = 0; i < enemies.size(); i++) { enemies[i]->show(); } // 显示子弹 for (int i = 0; i < bullets.size(); i++) { bullets[i]->show(); } // 显示分数和生命值 cout << endl; cout << "Score: " << (ENEMY_NUM - enemies.size()) << endl; cout << "Life: " << plane->life << endl; } void update() { // 更新飞机 plane->update(); // 更新敌机 for (int i = 0; i < enemies.size(); i++) { enemies[i]->update(); } // 更新子弹 for (int i = 0; i < bullets.size(); i++) { bullets[i]->update(); } // 处理碰撞 for (int i = 0; i < enemies.size(); i++) { if (plane->isCollide(*enemies[i])) // 玩家飞机与敌机碰撞 { if (plane->life <= 0) { cout << "Game Over!" << endl; exit(0); } } for (int j = 0; j < bullets.size(); j++) { if (bullets[j]->isCollide(*enemies[i])) // 子弹与敌机碰撞 { delete enemies[i]; enemies.erase(enemies.begin() + i); break; } } } // 发射子弹 if (_kbhit()) { char ch = _getch(); if (ch == ' ') { for (int i = 0; i < bullets.size(); i++) { if (bullets[i]->x == -1 && bullets[i]->y == -1) { bullets[i]->x = plane->x; bullets[i]->y = plane->y - 1; break; } } } } Sleep(50); // 控制帧率 } }; int main() { Game game; while (true) { game.show(); game.update(); } return 0; } ``` 这个小游戏打飞机是基于面向对象的思想实现的,其中定义了 `GameObject`、`Plane`、`Enemy` 和 `Bullet` 四个类,分别代表游戏中的游戏对象。`Plane` 类表示玩家控制的飞机,`Enemy` 类表示敌机,`Bullet` 类表示子弹。`GameObject` 类是这三个类的基类,抽象了游戏对象的公共属性和行为。 在 `Game` 类中,创建了一个玩家飞机、五架敌机和三个子弹的对象,并在 `update` 方法中处理游戏逻辑,包括更新游戏对象的位置、检测碰撞、发射子弹等操作。在 `show` 方法中,将游戏对象显示在控制台上,包括玩家飞机、敌机、子弹、分数和生命值。 在 `main` 函数中,创建了一个 `Game` 对象,并在一个无限循环中调用 `show` 和 `update` 方法,实现了游戏的运行。 当玩家飞机与敌机碰撞时,玩家飞机的生命值会减一,当生命值小于等于零时游戏结束。当子弹与敌机碰撞时,敌机会被销毁,并增加分数。玩家可以通过空格键发射子弹。 这只是一个简单的示例,您可以根据自己的需要对代码进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yz_518 Nemo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值