使用pygame开发一个弹幕射击游戏(一)

article/2025/7/15 16:10:22

本文作为开发过程记录用。

目前游戏画面:

下一个添加的功能:敌机可以进行射击。

 

 

 

弹幕类

from pygame.sprite import Sprite
from pygame import transform
import mathclass Barrage(Sprite):def __init__(self,raiden_settings,screen,ship,enemy,angle=0):self.barrage_type = enemy.barrage_typeself.screen = screenself.raiden_settings = raiden_settingsself.ship = shipself.image = pygame.image.load(raiden_settings. \barrage_image[barrage_type-1])self.rect = self.image.get_rect()self.rect.x = enemy.rect.xself.rect.y = enemy.rect.yself.x = float(self.rect.x)self.y = float(self.rect.y)self.angle = angleif self.barrage_type == 1:self.image = pygame.transform.rotate(self.image, raiden_settings.direction_angle)def update(self):if self.barrage_type == 1 or self.barrage_type == 2:self.x += self.raiden_settings.barrage_speed_factor * \math.sin(self.angle)self.y += self.raiden_settings.barrage_speed_factor * \math.cos(self.angle)if self.barrage_type == 3:tmp = ((self.x - self.ship.x) ** 2 + (self.y -self.ship.y) \** 2) ** 0.5self.x += self.raiden_settings.barrage_speed_factor * \(self.ship.x - self.x)/tmpself.y += self.raiden_settings.barrage_speed_factor * \(self.y - self.ship.y)/tmpself.rect.x = self.xself.rect.y = self.y

 

子弹类

import pygame
from pygame.sprite import Sprite
import math
from pygame import transformclass Bullet(Sprite):def __init__(self,raiden_settings,screen,ship,angle):super().__init__()self.screen = screenself.image = pygame.image.load(raiden_settings.bullet_image)self.image = pygame.transform.rotate(self.image,angle)self.rect = self.image.get_rect()self.rect.centerx = ship.rect.centerxself.rect.top = ship.rect.topself.y = float(self.rect.y) self.x = float(self.rect.x)self.angle = angleself.speed_factor = raiden_settings.bullet_speed_factordef update(self):self.y -=self.speed_factor * math.cos(self.angle)self.x +=self.speed_factor * math.sin(self.angle)self.rect.y = self.yself.rect.x = self.xdef draw_bullet(self):pygame.draw.rect(self.screen,self.color,self.rect)

 

 

按钮类

import pygame.fontclass Button():def __init__(self,raiden_settings,screen,msg):self.screen = screenself.screen_rect = screen.get_rect()self.width = raiden_settings.button_widthself.height = raiden_settings.button_heightself.button_color = raiden_settings.button_colorself.text_color = raiden_settings.button_text_colorself.font = pygame.font.SysFont(None,raiden_settings.button_font_size)self.rect = pygame.Rect(0,0,self.width,self.height)self.rect.center = self.screen_rect.centerself.prep_msg(msg)def prep_msg(self,msg):self.msg_image = self.font.render(msg,True,self.text_color,self.button_color)self.msg_image_rect = self.msg_image.get_rect()self.msg_image_rect.center = self.rect.centerdef draw_button(self):self.screen.fill(self.button_color,self.rect)self.screen.blit(self.msg_image,self.msg_image_rect)

 

掉落物类

import pygame
from pygame.sprite import Spriteclass DropItem(Sprite):def __init__(self,raiden_settings,screen,enemy,ship):super().__init__()self.screen = screenself.raiden_settings = raiden_settingsself.image = pygame.image.load( \raiden_settings.dropitem_image[ship.arms_level - 1]). \convert_alpha()self.rect = self.image.get_rect()self.rect.centerx = enemy.rect.centerxself.rect.top = enemy.rect.bottomself.y = self.rect.yself.speed_factor = raiden_settings.dropitem_speed_factorself.level = ship.arms_level + 1def update(self):self.y +=self.speed_factorself.rect.y = self.ydef draw_dropitem(self):self.screen.blit(self.image,self.rect)

 

敌机类

import pygame
from pygame.sprite import Sprite
from pygame import transform
from random import randintclass Enemy(Sprite):def __init__(self,raiden_settings,screen):super().__init__()self.screen = screenself.raiden_settings = raiden_settingsself.enemy_type = randint(1,3)self.image = pygame.image.load(raiden_settings. \enemy_image[self.enemy_type - 1]).convert_alpha()self.image = transform.smoothscale(self.image,raiden_settings.enemy_image_rect)self.image = pygame.transform.rotate(self.image, raiden_settings.direction_angle)self.rect = self.image.get_rect()self.x = float(self.rect.x)self.y = float(self.rect.y)self.barrage_type = self.enemy_typeself.set_enemy_rect()def blitme(self):self.screen.blit(self.image,self.rect)def update(self):# ~ self.x += (self.raiden_settings.enemy_speed_factor *# ~ self.raiden_settings.fleet_direction)# ~ self.rect.x = self.xif self.enemy_type == 1:self.y += self.raiden_settings.enemy_speed_factor if self.enemy_type == 2:if self.x < 100 :self.x += self.raiden_settings.enemy_speed_factorelif self.x >self.screen.get_rect().right - 100:self.x -= self.raiden_settings.enemy_speed_factorif self.enemy_type == 3:if self.x <= self.screen.get_rect().right:self.x += self.raiden_settings.enemy_speed_factorelse:self.x -= self.raiden_settings.enemy_speed_factorself.y += self.raiden_settings.enemy_speed_factorself.rect.x = self.xself.rect.y = self.ydef check_edges(self):screen_rect = self.screen.get_rect()if self.rect.right >= screen_rect.right:return Trueelif self.rect.left <= 0:return Truedef set_enemy_rect(self):if self.enemy_type == 1:self.x = randint(0,self.screen.get_rect().width)self.y = 0elif self.enemy_type == 2:self.y = 200if randint(1,2) == 1:self.x = 0else:self.x = self.screen.get_rect().rightelif self.enemy_type == 3:self.y = randint(0,300)if randint(1,2) == 1:self.x = 0else:self.x = self.screen.get_rect().rightself.rect.x = self.xself.rect.y = self.y

 

游戏内功能函数类

import sys
import pygamefrom Bullet import Bullet
from Enemy import Enemy
from time import sleep
from dropitem import DropItem
from random import random
from barrage import Barrage#检查输入
def check_events(raiden_settings,screen,stats,ship,enemys,bullets,play_button,sprites):for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:check_keydown_event(event,raiden_settings,screen,ship,bullets,sprites)elif event.type == pygame.KEYUP:check_keyup_event(event,ship)elif event.type == pygame.MOUSEBUTTONDOWN:mouse_x,mouse_y = pygame.mouse.get_pos()check_play_button(raiden_settings,stats,screen,play_button,mouse_x,mouse_y)elif event.type == pygame.USEREVENT:create_enemy(raiden_settings,screen,enemys,sprites)#更新屏幕
def update_screen(screen,stats,play_button,sprites):if not stats.game_active:play_button.draw_button()else:updates = sprites.draw(screen)pygame.display.update(updates)pygame.display.flip()#检查按下输入
def check_keydown_event(event,raiden_settings,screen,ship,bullets,sprites):if event.key == pygame.K_d:ship.moving_right = Trueelif event.key == pygame.K_a:ship.moving_left = Trueelif event.key == pygame.K_SPACE:fire_bullet(raiden_settings,screen,ship,bullets,sprites)elif event.key == pygame.K_w:ship.moving_up = Trueelif event.key == pygame.K_s:ship.moving_down = Trueelif event.key == pygame.K_q:sys.exit()#检查放开输入
def check_keyup_event(event,ship):if event.key == pygame.K_d:ship.moving_right = Falseelif event.key == pygame.K_a:ship.moving_left = Falseelif event.key == pygame.K_w:ship.moving_up = Falseelif event.key == pygame.K_s:ship.moving_down = False#更新子弹
def update_bullets(raiden_settings,screen,stats,ship,enemys,bullets,dropitems,scoreboard,sprites):for bullet in bullets.copy():if bullet.rect.bottom <=0 or  bullet.rect.x <= 0 or \bullet.rect.x >= raiden_settings.screen_width:bullets.remove(bullet)collisions = pygame.sprite.groupcollide(bullets,enemys,True,True)if collisions:enemy_hit(raiden_settings,screen,stats,ship,enemys,dropitems,scoreboard,collisions,sprites)#敌人被击中
def enemy_hit(raiden_settings,screen,stats,ship,enemys,dropitems,scoreboard,collisions,sprites):for bullet,enemy_list in collisions.items():stats.score += raiden_settings.score_up_factorscoreboard.prep_score()scoreboard.show_score()if check_drop(raiden_settings):for enemy in enemy_list:new_dropitem = DropItem(raiden_settings,screen,enemy,ship)dropitems.add(new_dropitem)sprites.add(new_dropitem)#更新掉落物
def update_dropitems(raiden_settings,screen,stats,ship,dropitems,sprites):for dropitem in dropitems.copy():if dropitem.rect.bottom <= 0:sprites.remove(dropitem)dropitems.remove(dropitem)collision = pygame.sprite.spritecollideany(ship,dropitems)if collision:sprites.remove(collision)dropitems.remove(collision)if collision.level == ship.arms_level + 1:ship.update_arms()#开火
def fire_bullet(raiden_settings,screen,ship,bullets,sprites):bullet_list = []if ship.arms_level == raiden_settings.arms_1_level:bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.vertical_angle))elif ship.arms_level == raiden_settings.arms_2_level:bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.left_deflectical_angle))bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.right_deflectical_angle))elif ship.arms_level == raiden_settings.arms_3_level:bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.vertical_angle))bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.left_deflectical_angle))bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.right_deflectical_angle))elif ship.arms_level == raiden_settings.arms_4_level:bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.vertical_angle))bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.left_deflectical_angle))bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.right_deflectical_angle))bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.left_horizontal_angle))bullet_list.append(Bullet(raiden_settings,screen,ship,raiden_settings.right_horizontal_angle))for bullet in bullet_list:bullets.add(bullet)sprites.add(bullet)#创建敌人
def create_enemy(raiden_settings,screen,enemys,sprites):enemy = Enemy(raiden_settings,screen)enemys.add(enemy)sprites.add(enemy)def update_enemys(raiden_settings,stats,lifeboard,screen,ship,enemys,bullets,sprites):if pygame.sprite.spritecollideany(ship,enemys):ship_hit(raiden_settings,stats,lifeboard,screen,ship,enemys,bullets,sprites)#玩家被击中
def ship_hit(raiden_settings,stats,lifeboard,screen,ship,enemys,bullets,sprites):if stats.ships_left > 0:stats.ships_left -= 1ship.reset_ship()lifeboard.dead(stats,sprites)reset_game(raiden_settings,screen,ship,enemys,bullets,sprites)sleep(1)else:stats.game_active = Falsepygame.mouse.set_visible(False)stats.ship_left = raiden_settings.ship_init_lifestats.score = 0stats.reset_stats()ship.reset_ship()reset_game(raiden_settings,screen,ship,enemys,bullets,sprites)pygame.mouse.set_visible(True)lifeboard.dead(stats,sprites)#重置游戏
def reset_game(raiden_settings,screen,ship,enemys,bullets,sprites):for enemy in enemys:sprites.remove(enemy)enemys.empty()for bullet in bullets:sprites.remove(bullet)bullets.empty()sprites.clear(screen,clear_callback)ship.center_ship()#检查玩家是否点击play按钮
def check_play_button(raiden_settings,stats,screen,play_button,mouse_x,mouse_y):if play_button.rect.collidepoint(mouse_x,mouse_y) and not \stats.game_active:stats.game_active = Truepygame.mouse.set_visible(False)screen.fill(raiden_settings.bg_color)#是否掉落物品
def check_drop(raiden_settings):if random() < raiden_settings.chance:return Trueelse:return False#检查掉落物是否到达屏幕底
def check_dropitem_bottom(raiden_settings,stats,screen,dropitems):screen_rect = screen.get_rect()for dropitem in dropitems.sprite():if dropitem.rect.bottom >= screen_rect.bottom:dropitems.remove(dropitem)#清除子图形
def clear_callback(surf, rect):bg = 255,255,255surf.fill(bg, rect)

 

生命值记录板类

from pygame.sprite import Sprite
from pygame.sprite import Group
from Ship import Ship
from pygame import transformclass Lifeboard(Sprite):def __init__(self,raiden_settings,screen,stats,sprites):super().__init__()self.stats = statsself.screen = screenself.rect = screen.get_rect()self.raiden_settings = raiden_settingsself.ships = Group()self.ship_list = []self.prep_ships()for ship in self.ships:sprites.add(ship)ship.image = transform.smoothscale(ship.image,raiden_settings.lifeboard_image_rect)def prep_ships(self):for ship_number in range(self.stats.ships_left):ship = Ship(self.raiden_settings,self.screen)ship.center = self.raiden_settings.lifeboard_ship_center + \ship_number * self.raiden_settings. \lifeboard_ship_center_growthship.bottom = self.raiden_settings.lifeboard_ship_bottomself.ships.add(ship)self.ship_list.append(ship)def dead(self,stats,sprites):self.ships.remove(self.ship_list[-1])sprites.remove(self.ship_list[-1])del self.ship_list[-1]

 

游戏类(主程序)

import sys
import pygamefrom Settings import Settings
from Ship import Ship
import game_functions as gf
from pygame.sprite import Group
from Enemy import Enemy
from GameStats import GameStats
from Button import Button
from Scoreboard import Scoreboard
from Lifeboard import Lifeboarddef run_game():pygame.init()raiden_settings = Settings()screen = pygame.display.set_mode((raiden_settings.screen_width,raiden_settings.screen_height))EVENT_CREATE_ENEMY = pygame.USEREVENT pygame.time.set_timer(EVENT_CREATE_ENEMY,300)pygame.display.set_caption("Raiden")play_button = Button(raiden_settings,screen,"Play!")ship = Ship(raiden_settings,screen)bullets = Group()enemys = Group()dropitems = Group()sprites = pygame.sprite.RenderUpdates()stats = GameStats(raiden_settings)scoreboard = Scoreboard(raiden_settings,screen,stats)lifeboard = Lifeboard(raiden_settings,screen,stats,sprites)screen.fill(raiden_settings.bg_color)sprites.add(ship)sprites.add(scoreboard)while True:gf.check_events(raiden_settings,screen,stats,ship,enemys,bullets,play_button,sprites)if stats.game_active:sprites.clear(screen,gf.clear_callback)sprites.update()gf.update_bullets(raiden_settings,screen,stats,ship,enemys,bullets,dropitems,scoreboard,sprites)gf.update_dropitems(raiden_settings,screen,stats,ship,dropitems,sprites)gf.update_enemys(raiden_settings,stats,lifeboard,screen,ship,enemys,bullets,sprites)gf.update_screen(screen,stats,play_button,sprites)run_game()

 

计分板类

import pygame.font
from pygame.sprite import Sprite
from pygame.sprite import Groupfrom Ship import Shipclass Scoreboard(Sprite):def __init__(self,raiden_settings,screen,stats):super().__init__()self.screen = screenself.screen_rect = screen.get_rect()self.raiden_settings = raiden_settingsself.stats = statsself.text_color = raiden_settings.scoreboard_text_colorself.font = pygame.font.SysFont(None,raiden_settings.scoreboard_font_size)self.prep_score()def prep_score(self):score_str = str(self.stats.score)self.image = self.font.render(score_str,True,self.text_color,self.raiden_settings.bg_color)self.rect = self.image.get_rect()self.rect.right = self.screen_rect.right self.rect.top = 0def show_score(self):self.screen.blit(self.image,self.rect)

 

常数类

import mathclass Settings():def __init__(self):#屏幕设置self.screen_width = 300self.screen_height = 600self.bg_color = (255,255,255)#飞行速度设置self.ship_speed_factor = 0.3self.enemy_speed_factor = 0.3self.fleet_drop_speed = 8self.enemy_speed_up_factor = 0.1self.bullet_speed_factor = 0.7self.barrage_speed_factor = 0.7#飞行方向设置self.fleet_direction = 1#生命值self.ship_init_life = 3#分数设置self.score_up_factor = 10#掉落物设置self.dropitem_speed_factor = 0.1#掉落指数设置self.chance = 0.5#武器等级设置self.init_arms_level = 1self.max_arms_level = 4self.arms_1_level = 1self.arms_2_level = 2self.arms_3_level = 3self.arms_4_level = 4#角度self.vertical_angle = 0self.right_deflectical_angle = math.pi/6self.left_deflectical_angle = -math.pi/6self.left_horizontal_angle = -math.pi/2self.right_horizontal_angle = math.pi/2self.direction_angle = 180self.angle_left_10 = -10self.angle_right_10 = 10#图片位置self.enemy_image = ['image/enemy1.png','image/enemy2.png','image/enemy3.png',]self.ship_image = 'image/9.png'self.bullet_image = 'image/bullet.png'self.dropitem_image = ['image/dropitem1.png','image/dropitem2.png','image/dropitem3.png','image/dropitem4.png',]self.barrage_image  = ['image\barrage1.png','image\barrage2.png','image\barrage3.png',]#enemy图片大小self.enemy_image_rect = (30,30)#lifeboard图片大小self.lifeboard_image_rect = (30,30)#ship图片大小self.ship_image_rect = (50,50)#计分板字体颜色self.scoreboard_text_color = (30,30,30)#计分板字体大小self.scoreboard_font_size = 48#计分板位置self.lifeboard_ship_center = 25self.lifeboard_ship_bottom = 50self.lifeboard_ship_center_growth = 15#button设置self.button_text_color = (255,255,255)self.button_color = (0,255,0)self.button_width = 200self.button_height = 50self.button_font_size = 48

 

飞船类

import pygame
from Settings import Settings
from pygame.sprite import Sprite
from pygame import transformclass Ship(Sprite):def __init__(self,raiden_settings,screen):super().__init__()self.screen = screenself.raiden_settings = raiden_settingsself.image = pygame.image.load(raiden_settings.ship_image). \convert_alpha()self.image = transform.smoothscale(self.image,raiden_settings.ship_image_rect)self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottomself.arms_level = raiden_settings.init_arms_levelself.center = float(self.rect.centerx)self.bottom = float(self.rect.bottom)self.moving_right = Falseself.moving_left = Falseself.moving_up = Falseself.moving_down = Falsedef update(self):if self.moving_right and self.rect.right < \self.screen_rect.right:self.center += self.raiden_settings.ship_speed_factorif self.moving_left and self.rect.left > 0:self.center -= self.raiden_settings.ship_speed_factorif self.moving_up and self.rect.top > 0:self.bottom -=self.raiden_settings.ship_speed_factorif self.moving_down and self.rect.bottom < \self.screen_rect.bottom:self.bottom +=self.raiden_settings.ship_speed_factorself.rect.centerx = self.centerself.rect.bottom = self.bottomdef blitme(self):self.screen.blit(self.image,self.rect)def center_ship(self):self.center = self.screen_rect.centerxdef update_arms(self):if self.arms_level < self.raiden_settings.max_arms_level:self.arms_level += 1def reset_ship(self):self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottomself.center = self.screen_rect.centerxself.bottom = self.screen_rect.bottomself.arms_level = self.raiden_settings.init_arms_level

 

游戏内部记录类

class GameStats():def __init__(self,raiden_settings):self.raiden_settings = raiden_settingsself.reset_stats()self.game_active = Falseself.score = 0def reset_stats(self):self.ships_left = self.raiden_settings.ship_init_life

 

转载于:https://www.cnblogs.com/wdl1078390625/p/9877769.html


http://chatgpt.dhexx.cn/article/amo2yJN6.shtml

相关文章

手机射击游戏中弹幕的开发

射击游戏中弹幕的开发 http://blog.vckbase.com/knight/archive/2005/03/29/4174.html 作者:牛阿牛 2005-02-28 nhf_2008hotmail.com nhf_2003hotmail.com email:nhf20021166163.com 留言:希望能给各位游戏开发一点的介绍;如有问题,请联系. 游戏射击中, boss可能是最重要…

基于C#弹幕类射击游戏的实现——(十)整合

有朋友说只看代码不爽,所以特上传EXE和一张截图,哈哈。 执行文件下载链接:http://pan.baidu.com/s/1pJ5Hg5X http://download.csdn.net/detail/unskytoo/8366523 剩下部分代码,首先是入口,MainForm public partial class MainForm : Form{public MainForm(){//// The In…

DxLib做弹幕射击游戏(二)——画一台敌机

直接看代码&#xff1a; #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {ChangeWindowMode( TRUE ) ;if( DxLib_Init() -1 ){return -1 ;}int gh ;//图像编号int x, y;//坐标x 200;y 1…

DxLib做弹幕射击游戏(一)

DxLib是神马东西&#xff1f;看名字&#xff0c;似乎是M$的DirectX的官方库&#xff1f;NONONO&#xff0c;这货其实是日本人开发出来的一个库&#xff0c;封装了很多DirectX的函数&#xff0c;使开发更方便。这个库在日本那边很流行&#xff0c;很多同人游戏都是使用这个库开发…

【四圣龙神录】 开源仿东方 弹幕射击游戏教程 官网(译)以及国内参考翻译资料

四圣龙神录 官网地址 http://dixq.net/sr/ 引用doujin 上的帖子的介绍 http://bbs.doujinstg.net/simple/?t1478.html 开源仿东方STG&#xff0d;四圣龙神录&#xff0c;带弹幕制作教程60讲&#xff0c;使用C语言DXLib 非常不错的仿东方的STG&#xff0c;网站上面带制作…

重写弹幕射击游戏的记录

项目背景介绍 上大学之后我一直在学习游戏开发&#xff0c;最开始是直接使用Easyx这个绘图库做Dos下的游戏&#xff0c;当时学习了C和数据结构之后正巧有个数据结构课程设计&#xff0c;就心生了要做这个游戏的想法。我算是那种有想法就想着去做的人&#xff08;有时候也算是缺…

【Unity2D入门教程】简单制作战机弹幕射击游戏⑥最终回扩展其它范围的内容

制作分数和生命的UI&#xff1a; 由于我们前面没有做类似的UI所以这里教大伙一下基本思路&#xff1a; 首先我们创建一个canvas用来创建两个Text用来显示分数和生命的UI 蓝色的是分数黄色的是生命 我们创建一个scoreplay的脚本挂载在text上 using System.Collections; usi…

【Unity2D入门教程】简单制作战机弹幕射击游戏③C#编写 子弹Laser脚本

学习目标&#xff1a; 今天教大伙怎么设置子弹Laser的组件以及编写关于它的脚本 学习组件&#xff1a; 老规矩还是添加一下它的组件用capusle collider2D刚好它还是个圆柱体&#xff0c;别忘了勾选它的isTrigger Rigibody2D的Body Type调成是让它不受重力以及物理碰撞影响&a…

【Unity2D入门教程】简单制作战机弹幕射击游戏⑦番外篇扩展一个大型敌人

布置场景&#xff1a; 我们先按CrtlD复制一个之前创建好的Enemy Prefab&#xff0c;然后更改它的Sprite&#xff0c;我们拖一张素材的图片进来并改变它的Pixel Per Unit让它大其它敌机一倍 由于体型变大了之前的Coliider就不适用了我们要重新删掉之前的再创建一个新的 同样它的…

【Unity2D入门教程】简单制作战机弹幕射击游戏④C#编写 敌人按指定路径以及敌人生成点脚本

前言&#xff1a; 我们前面忘记设置的当敌机和子弹碰到特定的位置&#xff08;指屏幕外的&#xff09;就会自动销毁 挂载的脚本Sherred如下 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Shredder : MonoBehaviour {private…

【Unity2D入门教程】简单制作战机弹幕射击游戏⑤C#编写 背景滚动移动以及增加粒子特效

学习目标&#xff1a; 上期结束后我们游戏的主体就已经差不多了&#xff0c;剩下的就要给游戏的真实质感以及可玩性上下大点功夫了&#xff0c;今天我们就从背景滚动移动以及增加粒子特效上出发。 背景滚动制作&#xff1a; 为了让游戏更具真实性的就是让玩家从视觉上感受飞机…

【Unity2D入门教程】简单制作战机弹幕射击游戏② C#编写 Player和Enemy脚本

学习目标&#xff1a; 上期的水平大伙看到我已经写好了Enemy和Player的脚本了&#xff0c;现在就把脚本教给大伙&#xff0c;话不多说搞的不丑 学习内容&#xff1a; 首先是Player的脚本&#xff08;之前没发现CSDN有这个代码段的&#xff0c;我的我的&#xff09; using Sy…

【Unity2D入门教程】简单制作战机弹幕射击游戏① 导入素材

学习目标&#xff1a; 今天我们制作一款类似银河战机的游戏导入素材并给它设置一下背景&#xff0c;把素材做成预设体等等 首先先上网找到我们需要的素材 Unity Asset Store - The Best Assets for Game MakingDiscover the best assets for game making. Choose from our mas…

弹幕射击游戏中旋转矩形碰撞检测的算法描述

分离轴法是根据两个多边形的几何中心在任意矢量方向的法线上的投影存在交叉的条件来做出的方法[32]。换而言之&#xff0c;如果可以找出这样一个方向&#xff0c;将两个多边形投影在此方向的法线上的投影不交叉&#xff0c;则说明碰撞未发生&#xff0c;如图5-3所示。 图中A、B…

Cocos2d-x 简单弹幕射击游戏

开发环境 Win10, Cocos2d-x v3.16, Visual Studio 2017, Visual Studio Code 项目阐述 这个游戏是一个小型的弹幕游戏。玩家将控制pipi美&#xff0c;在躲避pop子的子弹之余&#xff0c;射杀pop子。名字打算叫“pop子的深邃黑暗幻想”。 游戏的设计主要借鉴了东方系列的弹幕游…

程序员职业规划和学习规划

程序员职业规划路线 技术体系 阿里程序员等级 学习规划

程序员职业发展规划

程序员职业生涯发展到一定的程度都会面临着职业发展方向选择的问题&#xff0c;随着年龄的增长&#xff0c;面对日新月异的代码&#xff0c;感到力不从心&#xff0c;更年轻的程序员层出不穷&#xff0c;这些都是促使程序员向另一个方向进行转型&#xff0c;那么&#xff0c;程…

程序员10年职业规划

从事Dotnet程序开发工作近10年了&#xff0c;从开始的月薪3k的小程序员菜鸟&#xff0c;到现在年薪60w的项目总经理&#xff0c;从战战兢兢的去各个公司应聘&#xff0c;到现在开始面试那些战战兢兢的小程序员&#xff0c;回想起这近十年来的经验&#xff0c;看着还是朝气蓬勃的…

女生做软件测试的职业规划,来说说女程序员的职业规划要怎么做

如果你是一名女程序员&#xff0c;你一定会为如何规划自己的职业生涯而感到苦恼。本期乔布 女程序员的职业规划 要怎么做。 关键词&#xff1a; 女程序员的职业规划 总体来说&#xff0c;女程序员的职业规划路线主要有四种&#xff1a;技术线路&#xff1b;业务路线&#xff1b…