首页 手机游戏 手机软件 新闻 攻略 手游礼包 手游开测 手游合集 手游专区 排行榜

魂斗罗小游戏(魂斗罗小游戏在线玩)

时间:2022-04-21 10:53:02

小编:一只程序媛呀

阅读:

在手机上看
手机扫描阅读
导语​​​​​​​​​​​​​​​​​​​​​​​​​​​​

不知道红白机上的《魂斗罗》是不是小伙伴儿们小时候的经典回忆呢?反正木木子那时候貌似是有

的,BUT 女孩子一般是不玩儿这类游戏的!!

(哎呀,木木子是不是偷偷保住了我年龄的秘密......)⛲⛲

魂斗罗小游戏(魂斗罗小游戏在线玩)

​​

魂斗罗是一款经典动作射击闯关类游戏,在当时的游戏市场上,可以说是一款相当有挑战难度的游戏。毕竟那时候消息闭塞,压根没有攻略之说,更何况那时年少,玩游戏图的是爽快,很多人也不会刻意去深度研究卡位、战斗技巧等,就是最基础的突突突、闪闪闪,于是就有了N种死亡经历。

今天木木子带大家来看看如何打造Python像素版本的经典游戏——魂斗罗吧!

像素风游戏类型之前也有几款的话比如:《我的世界》、《坦克大战》、《超级马里奥》......可以

看文末的文章汇总哈!往期的资料素材等都在顾木子的主页左侧信息获取哈!

魂斗罗小游戏(魂斗罗小游戏在线玩)

​​​​​

正文

这边是一个简易版本的魂斗罗哈,有大佬自行优化一波!纯分享给大家娱乐。

大家都知道Python版本的游戏编写基本上都是Pygame游戏模块,今天就用的这个哈。

游戏规则:上下左右大家熟悉的——ASDW键,K跳跃,J放枪子儿。

打完一个小兵一个大boss就闯关成功了。嗯哼——超简单,有手就玩得赢的游戏23333!

一、准备中1)素材准备

像素风格人物人物形象(仅部分)

魂斗罗小游戏(魂斗罗小游戏在线玩)

背景图展示:

魂斗罗小游戏(魂斗罗小游戏在线玩)

主要人物素材:

​(部分图)

魂斗罗小游戏(魂斗罗小游戏在线玩)

魂斗罗小游戏(魂斗罗小游戏在线玩)

2)环境安装

这款简易版本的《魂斗罗游戏》木木子环境设置的是:Python3、Pycharm、Pygame部分自带的不说了哈。

模块安装:

pIP install -i https://pypi.douban.com/simple/ +模块名

二、正式敲代码

1)游戏敌方boss出场以及定义。

import pygameimport randomfrom pygame.sprite import Spriteimport datetimeclass Game_Boss(Sprite):def __init__(self,game_settings,screen,player):super().__init__()self.pos_i = 0.0self.pos_j = 0.0self.pos_k = 0.0self.game_settings = game_settingsself.screen = screenself.image = pygame.image.load('图片/boss/left/move/bz1.png')self.rect = self.image.get_rect()self.rect.x = self.game_settings.screen_width-self.rect.widthself.rect.bottom = 370self.x = float(self.rect.x)#敌人的位置self.speed_factor = self.game_settings.enemy_speed_factorself.boss_start_Y = 370#开始boss人物的高度self.boss_Y = self.boss_start_Yself.attack1_order = 0self.player = playerself.mx = self.xdef blitme(self):self.screen.blit(self.image,self.rect)def update(self):if self.game_settings.boss_alive:self.direction()self.rand_att()if self.game_settings.attack_1:if self.game_settings.boss_direction == 1:self.attack_1('left')else:self.attack_1('right')elif self.game_settings.attack_2:if self.game_settings.boss_direction == 1:self.attack_2('left')else:self.attack_2('right')elif self.game_settings.boss_jump:self.jump()elif self.game_settings.boss_run:if self.game_settings.boss_direction == 1:self.run('left')else:self.run('right')elif self.player.rect.centerx > self.rect.x:self.x += self.speed_factorself.rect.x = self.xself.move('right')elif self.player.rect.centerx < self.rect.x:self.x -= self.speed_factorself.rect.x = self.xself.move('left')else:self.boom()self.game_settings.game_win = Truedef rand_att(self):random.seed(datetime.datetime.now())if self.game_settings.attack_1 == False and self.game_settings.attack_2 == False and self.game_settings.boss_jump == False and self.game_settings.boss_run == False:self.rand_num = random.randint(1,70)if self.rand_num == 1:self.game_settings.attack_1 = Trueelif self.rand_num == 2:self.game_settings.attack_2 = Trueelif self.rand_num == 3:self.game_settings.boss_jump =Trueelif self.rand_num == 4:self.game_settings.boss_run = Truedef attack_1(self,direction):self.rect.bottom = 410#做此动作时人物的位置self.names1 = locals()self.players1 = []for self.j in range(0,34):self.names1['player_image%s' %self.j] = pygame.image.load('图片/boss/'+direction+'/attack_1/%s.png' %self.j)self.players1.append(self.names1['player_image%s' %self.j])self.image = self.players1[int(self.pos_i)]self.pos_i += 0.5if self.pos_i >= 34.0 :#循环完成后:self.pos_i = 0.0self.game_settings.attack_1 = Falsedef attack_2(self,direction):self.rect.bottom = 355self.names1 = locals()self.players1 = []for self.j in range(0,30):self.names1['player_image%s' %self.j] = pygame.image.load('图片/boss/'+direction+'/attack_2/%s.png' %self.j)self.players1.append(self.names1['player_image%s' %self.j])self.image = self.players1[int(self.pos_i)]self.pos_i += 0.5if self.pos_i >= 30:self.pos_i = 0.0self.game_settings.attack_2 = Falsedef move(self,direction):#循环图片self.rect.bottom = 370self.names1 = locals()self.players1 = []for self.j in range(1,7):self.names1['player_image%s' %self.j] = pygame.image.load('图片/boss/'+direction+'/move/bz%s.png' %self.j)self.players1.append(self.names1['player_image%s' %self.j])self.image = self.players1[int(self.pos_i)]self.pos_i += 0.1#图片变化速率if self.pos_i > 6.0:#敌人bag有4个动作self.pos_i = 0.0def run(self,direction):self.rect.bottom = 400self.names1 = locals()self.players1 = []for self.j in range(0,6):self.names1['player_image%s' %self.j] = pygame.image.load('图片/boss/'+direction+'/run/%s.png' %self.j)self.players1.append(self.names1['player_image%s' %self.j])self.image = self.players1[int(self.pos_i)]self.pos_i += 0.3if self.pos_i >= 6:self.pos_i = 0.0self.game_settings.boss_run = Falseif self.player.rect.centerx > self.rect.x :#or self.x < self.mx:self.x += 6self.rect.x = self.xelif self.player.rect.centerx < self.rect.x :#or self.x > self.mx:self.x -= 6self.rect.x = self.xdef jump(self):self.rect.bottom = self.boss_Yif self.game_settings.boss_jump_vel < 0:self.game_settings.boss_jump_vel += 0.6#跳跃上升的增加的速率elif self.game_settings.boss_jump_vel > 0:self.game_settings.boss_jump_vel += 0.8#跳跃下降增加的速率self.boss_Y += self.game_settings.boss_jump_velif self.boss_Y > self.boss_start_Y:self.game_settings.boss_jump = False#结束跳跃self.boss_Y = self.boss_start_Yself.game_settings.boss_jump_vel = -12.0#恢复跳跃开始的速度if self.player.rect.centerx > self.rect.x :#or self.x < self.mx:self.x += self.speed_factorself.rect.x = self.xelif self.player.rect.centerx < self.rect.x :#or self.x > self.mx:self.x -= self.speed_factorself.rect.x = self.xself.names1 = locals()self.players1 = []for self.j in range(3,10):self.names1['player_image%s' %self.j] = pygame.image.load('图片/boss/left/jump/%s.png' %self.j)self.players1.append(self.names1['player_image%s' %self.j])self.image = self.players1[int(self.pos_j)]self.pos_j += 0.4#跳跃旋转速率if self.pos_j >= 7:#跳跃有7个动作self.pos_j = 0.0def direction(self):if self.player.rect.centerx > self.rect.x:self.game_settings.boss_direction = -1else:self.game_settings.boss_direction = 1def boom(self):self.names1 = locals()self.players1 = []for self.j in range(1,4):self.names1['player_image%s' %self.j] = pygame.image.load('图片/boss/boom%s.png' %self.j)self.players1.append(self.names1['player_image%s' %self.j])self.image = self.players1[int(self.pos_k)]self.pos_k += 0.05if self.pos_k >= 3.0:#self.game_settings.boom_end = Trueself.game_settings.boss_boom_end = True

2)玩家定义的子弹设置

import pygamefrom pygame.sprite import Sprite class Bullet(Sprite):def __init__(self,game_settings,screen,player):super().__init__()self.game_settings = game_settingsself.player = playerself.screen = screenself.image = pygame.image.load('图片/bullet1.png')self.rect = self.image.get_rect()self.rect.left = player.rect.right-20#开始子弹默认往右射击if self.player.player_direction == -1:self.rect.right = player.rect.left+20self.rect.centery = player.rect.centery-15if self.player.player_down:self.rect.centery = player.rect.centery#调整子弹位置if self.player.player_up:self.rect.bottom = player.rect.top+20self.x = float(self.rect.x)self.y = float(self.rect.y)self.mx = self.x#mx为保存初始x的坐标self.my = self.yself.speed_factor = game_settings.bullet_speed_factordef update(self):if self.y<self.my or self.y == self.my and self.x == self.mx and self.player.player_up:self.y -= self.speed_factorself.rect.y = self.yelif self.x < self.mx or self.x == self.mx and self.player.player_direction == -1:self.x -= self.speed_factorself.rect.x = self.xelif self.x>self.mx or self.x == self.mx:#默认为右方向self.x += self.speed_factorself.rect.x = self.xdef blit_bullet(self):self.screen.blit(self.image,self.rect)

3)主程序

'''csdn:顾木子吖'''import pygameimport sysfrom pygame.locals import *from settings import Settingsfrom game_player import Game_Player import game_functions as gffrom pygame.sprite import Groupfrom game_stats import GameStatsfrom game_boss import Game_Bossfrom button import Buttondef run_game():bg = pygame.image.load("图片/map01.jpeg")game_settings = Settings()pos_x = 0#地图移动opygame.init()screen = pygame.display.set_mode((game_settings.screen_width,game_settings.screen_height))pygame.display.set_caption("经典像素风游戏——魂斗罗")stats = GameStats(game_settings)player = Game_Player(game_settings,screen)bullets = Group()boss = Group()enemys = Group()win_button = Button(game_settings,screen,"YOU WIN")gf.create_legion(game_settings,screen,enemys)gf.create_boss(game_settings,screen,player,boss)while True:pygame.mouse.set_visible(False)gf.check_events(game_settings,screen,player,bullets)gf.update_player(game_settings,stats,player,enemys)gf.update_bullet(game_settings,bullets,screen,enemys,boss)gf.update_enemys(game_settings,enemys)gf.update_boss(game_settings,boss)gf.update_screen(game_settings,bg,pos_x,screen,player,bullets,enemys,boss,win_button)if player.moving_right and player.center > player.screen_rect.centerx and game_settings.boss_appear == False:game_settings.screen_rolling = Truepos_x -= 5#屏幕滚动速度else:game_settings.screen_rolling = Falserun_game()

等等等等.......游戏代码太多了。

​三、效果展示

我的速度调得比较快哈,自己调慢点儿。

1)Part 1 初始化界面‍♀️

魂斗罗小游戏(魂斗罗小游戏在线玩)

2)Part 2 打BOSS‍♂️

魂斗罗小游戏(魂斗罗小游戏在线玩)

3)Part 3 胜利

魂斗罗小游戏(魂斗罗小游戏在线玩)

​​​总结

嘿!新一轮的小游戏就写到这里结束啦,如需完整的资料项目点下方链接哦~

我还得想想下一个写什么内容呢——苦思冥想中。你们玩儿,我先撤了。

往期的资料源码素材等私信小编06即可免费拿!

魂斗罗小游戏(魂斗罗小游戏在线玩)

本文标签:

相关阅读 更多
  • 火影忍者疾风传ost2(火影忍者疾风传ost1)
    火影忍者疾风传ost2(火影忍者疾风传ost1)
    在今年已经开播的众多新番动画当中,《Megalo Box》的存在可谓是耀眼异常。这部动画不仅拥有着粗狂复古的画风,万分吸引的故事,其中的配乐表现更是极为出挑。想必有不少同学对于
    时间:2022-04-22
  • 火影忍者羁绊60(火影忍者羁绊60隐藏英雄密码)
    火影忍者羁绊60(火影忍者羁绊60隐藏英雄密码)
    在云顶之弈11.12的更新当中,虽然对于游戏机制以及羁绊人口上限的改动非常多,但在这次改动里面对于羁绊的改动和加强却是少之又少,而圣光守卫羁绊却有幸成为上个版本里为数不多
    时间:2022-04-22
  • 火影忍者羁绊55(火影忍者羁绊5.6隐藏英雄密码)
    火影忍者羁绊55(火影忍者羁绊5.6隐藏英雄密码)
    在火影忍者中,本来我们都以为迈特凯与卡卡西的实力差不了多少,虽说曾吊打晓组织的干柿鬼鲛,但毕竟迈特凯总是站在与卡卡西同一个层次上,总是视他为最重要的对手,而至于卡卡西的实
    时间:2022-04-22
  • 火影忍者羁绊43(火影忍者羁绊433什么英雄厉害)
    火影忍者羁绊43(火影忍者羁绊433什么英雄厉害)
    火影忍者OL周年庆开始啦,这次增加了一个新的玩法,羁绊对决,看起来有点小意思哟,还有大量的周年庆活动和一些福利,还是一起来看看具体更新内容吧。主要更新内容如下:1、新增玩法-羁
    时间:2022-04-22
  • 火影忍者羁绊31(火影忍者羁绊3.1隐藏英雄密码)
    火影忍者羁绊31(火影忍者羁绊3.1隐藏英雄密码)
    如何快速获得羁绊硬币兑换回归商店中的黄金增幅书和白金徽章呢?对于活跃玩家来说,整个回归活动,最想要的就是纯净的黄鸡增幅书和白金徽章礼盒了,但是我们每天和回归号组队刷图,最
    时间:2022-04-22