
以下是部分代码预览:
"""
双人游戏Arcade街机模块让角色上下斜坡示例。
本程序加载csv地图,根据数字映射加载相应的图块,生成地图。
"""
import arcade
import os
SPRITE_SCALING = 0.5
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 600
SCREEN_TITLE = "双人游戏让角色上下斜坡示例:lixingqiu译"
SPRITE_PIXEL_SIZE = 128
GRID_PIXEL_SIZE = (SPRITE_PIXEL_SIZE * SPRITE_SCALING)
# 视口边距
VIEWPORT_MARGIN = 40
RIGHT_MARGIN = 150
# 物理参数
MOVEMENT_SPEED = 5
JUMP_SPEED = 14
GRAVITY = 0.5
def get_map():
"""加载以逗号隔开的csv地图,它其实只是一个地图块的二维映射"""
map_file = open("map_with_ramps_2.csv")
map_array = []
for line in map_file:
line = line.strip()
map_row = line.split(",")
for index, item in enumerate(map_row):
map_row[index] = int(item)
map_array.append(map_row)
return map_array
class MyGame(arcade.Window):
""" 主应用程序类,继承自Arcade的窗口类. """
def __init__(self, width, height, title):
"""
初始化方法,参数为宽度,高度,标题
"""
super().__init__(width, height, title)
# 设置工作目录
file_path = os.path.dirname(os.path.abspath(__file__))
os.chdir(file_path)
# 角色列表定义
self.all_sprites_list = None
self.coin_list = None
self.player_list = None
# 玩家定义
self.player_sprite = None
self.wall_list = None
self.physics_engine = None
self.physics_engine2 = None
self.view_left = 0
self.view_bottom = 0
self.game_over = False
def start_new_game(self):
""" Set up the game and initialize the variables. """
# 实例化角色列表
self.all_sprites_list = arcade.SpriteList()
self.wall_list = arcade.SpriteList()
self.player_list = arcade.SpriteList()
# 实例化玩家1
self.player_sprite = arcade.Sprite("images/character.png",
SPRITE_SCALING)
self.player_sprite.center_x = 64
self.player_sprite.center_y = 270
self.player_list.append(self.player_sprite)
self.all_sprites_list.append(self.player_sprite)
# 实例化玩家2
self.player_sprite2 = arcade.Sprite("images/character.png",
SPRITE_SCALING)
self.player_sprite2.center_x = 128
self.player_sprite2.center_y = 270
self.player_list.append(self.player_sprite2)
self.all_sprites_list.append(self.player_sprite2)
map_array = get_map()
# 设置背景颜色为亚马逊深绿色
arcade.set_background_color(arcade.color.AMAZON)
# 设置初始的视口边界
# 这些值就是我们要滚到的地方
self.view_left = 0
self.view_bottom = 0
self.game_over = False
def on_draw(self):
"""
Render the screen.
"""
# 在绘画之前此渲染命令要先执行
arcade.start_render()
# 画所有的角色
self.wall_list.draw()
self.player_list.draw()
def on_key_press(self, key, modifiers):
"""
按任意键时调用此方法
"""
def on_key_release(self, key, modifiers):
"""
松任意键时调用此方法.
"""
if key == arcade.key.LEFT or key == arcade.key.RIGHT:
self.player_sprite.change_x = 0
if key == arcade.key.A or key == arcade.key.D:
self.player_sprite2.change_x = 0
def update(self, delta_time):
""" Movement and game logic """
if self.player_sprite.right >= self.end_of_map: # 玩家跳出地图总宽度游戏结束
self.game_over = True
if self.player_sprite2.right >= self.end_of_map: # 玩家跳出地图总宽度游戏结束
self.game_over = True
# 所有角色更新
if not self.game_over:
self.physics_engine.update()
self.physics_engine2.update()
def main():
window = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
window.start_new_game()
arcade.run()
if __name__ == "__main__":
main()
如需要查看完整代码,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)
