1 Commits

Author SHA1 Message Date
laktionov-as fb5a01b0b7 Основы игры и анимация 2026-05-31 13:26:18 +03:00
9 changed files with 147 additions and 91 deletions
+14
View File
@@ -0,0 +1,14 @@
{
"automappingRulesFile": "",
"commands": [
],
"compatibilityVersion": 1100,
"extensionsPath": "extensions",
"folders": [
"."
],
"properties": [
],
"propertyTypes": [
]
}
+37
View File
@@ -0,0 +1,37 @@
{
"Map/SizeTest": {
"height": 4300,
"width": 2
},
"activeFile": "assets/level1.tmx",
"expandedProjectPaths": [
],
"fileStates": {
"assets/level1.tmx": {
"scale": 0.95296875,
"selectedLayer": 0,
"viewCenter": {
"x": 480.07870142646334,
"y": 320.05246761764226
}
},
"assets/tiles/terrain_atlas.tsx": {
"scaleInDock": 1,
"scaleInEditor": 1
}
},
"last.imagePath": "C:/Users/User/Downloads/git/arcade/assets/tiles",
"map.lastUsedFormat": "tmx",
"map.layerDataFormat": null,
"map.renderOrder": null,
"openFiles": [
"assets/level1.tmx",
"assets/tiles/terrain_atlas.tsx"
],
"project": "Game.tiled-project",
"recentFiles": [
"assets/tiles/terrain_atlas.tsx",
"assets/level1.tmx"
],
"tileset.lastUsedFormat": "tsx"
}
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.10.2" orientation="orthogonal" renderorder="left-down" width="30" height="20" tilewidth="32" tileheight="32" infinite="0" nextlayerid="3" nextobjectid="1">
<tileset firstgid="1" source="tiles/terrain_atlas.tsx"/>
<layer id="2" name="flor" width="30" height="20">
<data encoding="base64">
ygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMsCAACKAgAAyQIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAAygIAAMoCAADKAgAA
</data>
</layer>
</map>
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.10" tiledversion="1.10.2" name="terrain_atlas" tilewidth="32" tileheight="32" tilecount="1024" columns="32">
<image source="terrain_atlas.png" width="1024" height="1024"/>
</tileset>
+83
View File
@@ -0,0 +1,83 @@
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
class Player(arcade.Sprite):
def __init__(self):
super().__init__(
':resources:/images/animated_characters/female_adventurer/femaleAdventurer_idle.png',
scale = 1
)
self.center_x = SCREEN_WIDTH//2
self.center_y = SCREEN_HEIGHT//2
#self.texture_left = arcade.SpriteSheet('./tiles/gold.png').get_texture_grid((64,64),4,4)
class Object(arcade.Sprite):
def __init__(self,x,y):
super().__init__()
self.textures = arcade.SpriteSheet('./assets/tiles/BODY_animation.png').get_texture_grid((64,64),8,8)
self.center_x = x
self.center_y = y
self.cur_texture = 0
self.set_texture(self.cur_texture)
self.timer = 0
def update(self,delta_time):
self.timer += delta_time
if self.timer >= 0.5:
if self.cur_texture >= len(self.textures)-1:
self.cur_texture = 0
else:
self.cur_texture += 1
self.timer = 0
self.set_texture(self.cur_texture)
class MainView(arcade.View):
def __init__(self):
super().__init__()
self.background_color = (100,100,200)
self.player = Player()
self.sprite_list = arcade.SpriteList()
self.sprite_list.append(self.player)
self.sprite_list.append(Object(100,50))
self.tilemap = arcade.load_tilemap('./assets/level1.tmx', scaling=1)
self.flor_list = self.tilemap.sprite_lists["flor"]
def on_update(self,delta_time):
self.sprite_list.update()
def on_draw(self):
self.clear()
self.flor_list.draw()
arcade.draw_circle_filled(400,300,100,(255,255,0))
arcade.draw_circle_filled(350,330,20,(0,0,0))
arcade.draw_arc_outline(400,280,150,100,(0,0,0),200,340,10)
self.sprite_list.draw()
arcade.draw_circle_filled(450,330,20,(0,0,0))
def on_key_press(self,key,mod):
if key == arcade.key.A:
self.player.change_x = -5
elif key == arcade.key.D:
self.player.change_x = 5
elif key == arcade.key.W:
self.player.change_y = 5
elif key == arcade.key.S:
self.player.change_y = -5
def on_key_release(self,key,mod):
if key == arcade.key.A or key == arcade.key.D:
self.player.change_x = 0
if key == arcade.key.W or key == arcade.key.S:
self.player.change_y = 0
if __name__ == '__main__':
window = arcade.Window(SCREEN_WIDTH,SCREEN_HEIGHT,'Игра с видом сверху')
view = MainView()
window.show_view(view)
arcade.run()
-91
View File
@@ -1,91 +0,0 @@
import arcade
from random import randint
class MainView(arcade.View):
def __init__(self):
super().__init__()
self.background_color = (100,100,200)
self.engine = arcade.PymunkPhysicsEngine(gravity=(0, 0))
self.key_up = False
self.key_down = False
self.key_left = False
self.key_right = False
self.objects = arcade.SpriteList()
for _ in range(10):
self.objects.append(
arcade.Sprite(
':resources:/images/tiles/bomb.png',
scale=0.5,
center_x = randint(0,800),
center_y = randint(0,800)
)
)
self.engine.add_sprite_list(
self.objects,
mass=1,
friction=0.0,
elasticity=0.0,
moment_of_inertia=float('inf'),
damping=0.1
)
self.walls = arcade.SpriteList()
for i in range(15):
for j in range(15):
if i==0 or j==0 or i==12 or j==12:
self.walls.append(
arcade.Sprite(
':resources:/images/tiles/brickBrown.png',
scale=0.5,
center_x = 32 + i*64,
center_y = 32 + j*64
)
)
self.engine.add_sprite_list(
self.walls,
body_type=arcade.PymunkPhysicsEngine.STATIC)
def on_update(self, delta_time):
self.objects.update()
for obj in self.objects:
if self.key_up:
self.engine.apply_force(obj,(0,100))
if self.key_down:
self.engine.apply_force(obj,(0,-100))
if self.key_left:
self.engine.apply_force(obj,(-100,0))
if self.key_right:
self.engine.apply_force(obj,(100,0))
self.engine.step(delta_time)
def on_draw(self):
self.clear()
self.objects.draw()
self.walls.draw()
def on_key_press(self,key,mod):
if key == arcade.key.W:
self.key_up = True
if key == arcade.key.S:
self.key_down = True
if key == arcade.key.A:
self.key_left = True
if key == arcade.key.D:
self.key_right = True
def on_key_release(self,key,mod):
if key == arcade.key.W:
self.key_up = False
if key == arcade.key.S:
self.key_down = False
if key == arcade.key.A:
self.key_left = False
if key == arcade.key.D:
self.key_right = False
if __name__ == '__main__':
window = arcade.Window(800,800,'')
view = MainView()
window.show_view(view)
arcade.run()