0
2

More than 1 year has passed since last update.

python キャラクタをひょこひょこ動かす

Last updated at Posted at 2021-06-20

python キャラクタをひょこひょこ動かすコードです
←や→キーで少し左右に動きます

import pygame
from pygame.locals import *
import sys
def main():
    pygame.init()                                 # Pygameの初期化
    screen = pygame.display.set_mode((800, 600))  # 800*600の画面
    px=120
    py=100
    ph=99
    pw=99
    gMap = pygame.image.load("hito.png").convert_alpha()   #勇者 50x50
    ct=0
    ck = pygame.time.Clock()
    while True:
        ck.tick(30) #1秒間で30フレームになるように33msecのwait
        screen.fill((255,255,255)) 
        ct+=1
        #n1=ct%4
        n1=int(ct/5)%4
        if n1 == 0:
            screen.blit(gMap ,(px,py),(0,0,pw,ph))
        elif n1 == 1:
            screen.blit(gMap ,(px,py),(101,0,pw,ph))
        elif n1 == 2:
            screen.blit(gMap ,(px,py),(1,101,pw,ph))
        elif n1 == 3:
            pygame.transform.rotate(gMap, 30)
            screen.blit(gMap ,(px,py),(101,101,pw,ph))

        pygame.display.update()                                         # 画面更新
        # イベント処理
        for event in pygame.event.get():  # イベントキューからキーボードやマウスの動きを取得
            if event.type == QUIT:        # 閉じるボタンが押されたら終了
                pygame.quit()             # Pygameの終了(ないと終われない)
                sys.exit()                # 終了(ないとエラーで終了することになる)
            elif event. type == KEYDOWN: 
                if event.key==K_LEFT:
                  px -=5#横方向の速度
                elif event.key==K_RIGHT:
                  px +=5#横方向の速度

if __name__ == "__main__":
    main()

画像
hito.png

動作環境

Python3以上とpygameが必要です
pygameがない場合、
pip install pygame
でインストールしてください

起動方法

適当な場所にコードと画像を保存します。
ファイル名は適当でいいですが、よくわからない人はとりあえず "bg.py" という名で、
画像はコードと同じフォルダに"hito.png"という名で保存してください。
python bg.py
で動きます。

縄跳びっぽ動き

上矢印キーで二重跳び、下矢印キーでもどります

import pygame
from pygame.locals import *
import sys
def main():
    pygame.init()                                 # Pygameの初期化
    screen = pygame.display.set_mode((800, 600))  # 800*600の画面
    px=120
    py=100
    ph=95
    pw=95
    stx=4
    sty=4

    gMap = pygame.image.load("hito.png").convert_alpha()   #勇者 50x50
    ct=0
    ck = pygame.time.Clock()

    fg=0

    while True:
        ck.tick(30) #1秒間で30フレームになるように33msecのwait
        screen.fill((255,255,255)) 
        ct+=1

        if fg==0:
            n1=int(ct/5)%2
            if n1 == 0:
                screen.blit(gMap ,(px,py),(stx,sty,pw,ph))
            elif n1 == 1:
                screen.blit(gMap ,(px,py),(100+stx,100+sty,pw,ph))

        if fg==1:
            n1=int(ct/5)%4
            if n1 == 0:
                screen.blit(gMap ,(px,py),(stx,sty,pw,ph))
            elif n1 == 1:
                screen.blit(gMap ,(px-2,py-14),(100+stx,sty,pw,ph))
            elif n1 == 2:
                screen.blit(gMap ,(px-2,py-14),(stx,100+sty,pw,ph))
            elif n1 == 3:
                screen.blit(gMap ,(px,py),(100+stx,100+sty,pw,ph))


        pygame.display.update()                                         # 画面更新
        # イベント処理
        for event in pygame.event.get():  # イベントキューからキーボードやマウスの動きを取得
            if event.type == QUIT:        # 閉じるボタンが押されたら終了
                pygame.quit()             # Pygameの終了(ないと終われない)
                sys.exit()                # 終了(ないとエラーで終了することになる)
            elif event. type == KEYDOWN: 
                if event.key==K_LEFT:
                  px -=5 #横方向の速度
                elif event.key==K_RIGHT:
                  px +=5 #横方向の速度
                elif event.key==K_UP:
                  fg = 1 #横方向の速度
                elif event.key==K_DOWN:
                  fg = 0 #横方向の速度

if __name__ == "__main__":
    main()

縄跳

画像を修正しました
hito.png

雨つぶにあたるとhpが削られていきます
遊び方:左右キーで左右、もう一度押すとスピードアップします


import pygame
from pygame.locals import *
import sys
import random

class Rain():
    def __init__(self):
        self.rx=random.randint(1,800)
        self.ry=random.randint(1,100)
        self.rvy= 0
        self.ray= 1
        self.isStart=False
        self.gMap = pygame.image.load("hito.png").convert_alpha()   #勇者 50x50
        
    def update(self,px,py) :
        hit=0
        r=random.randint(1,100)
        if r==3:
            self.isStart=True
        if self.isStart:    
            self.rvy+=self.ray
            self.ry+=self.rvy
            if self.ry>800:
                self.ry=30
                self.rvy=0
                self.isStart=False
            if px<self.rx<px+100 and py<self.ry<py+100:
                #print("hit")
                hit=1
                self.isStart=False
        return hit
    def draw(self,screen):
        if self.isStart:    
            screen.blit(self.gMap ,(self.rx,self.ry),(3,203,10,10))
        

def main():
    pygame.init()                                 # Pygameの初期化
    screen = pygame.display.set_mode((800, 500))  # 800*600の画面
    px=40
    py=300
    ph=95
    pw=95
    pv=2
    php=100
    gMap = pygame.image.load("hito.png").convert_alpha()   #勇者 50x50
    ct=0
    ck = pygame.time.Clock()
    rainNum=15
    Rs=[]
    for i in range(rainNum):
        R=Rain()
        Rs.append(R) 
    while True:
        ck.tick(30) #1秒間で30フレームになるように33msecのwait
        screen.fill((255,255,255)) 
        for R in Rs:
            hit = R.update(px,py) 
            R.draw(screen)
            if hit==1:
                php-=1
        print(php)        
        px+=pv
        ct+=1
        n1=int(ct/5)%4
        if pv<0:
            if n1 == 0:
                screen.blit(gMap ,(px,py),(3,3,pw,ph))
            elif n1 == 1:
                screen.blit(gMap ,(px,py),(103,3,pw,ph))
            elif n1 == 2:
                screen.blit(gMap ,(px,py),(3,103,pw,ph))
            elif n1 == 3:
                screen.blit(gMap ,(px,py),(103,103,pw,ph))
        else:
            if n1 == 3:
                screen.blit(gMap ,(px,py),(203,3,pw,ph))
            elif n1 == 2:
                screen.blit(gMap ,(px,py),(303,3,pw,ph))
            elif n1 == 1:
                screen.blit(gMap ,(px,py),(203,103,pw,ph))
            elif n1 == 0:
                screen.blit(gMap ,(px,py),(303,103,pw,ph))

        pygame.display.update()                                         # 画面更新
        # イベント処理
        for event in pygame.event.get():  # イベントキューからキーボードやマウスの動きを取得
            if event.type == QUIT:        # 閉じるボタンが押されたら終了
                pygame.quit()             # Pygameの終了(ないと終われない)
                sys.exit()                # 終了(ないとエラーで終了することになる)
            elif event. type == KEYDOWN: 
                if event.key==K_LEFT:
                  #print("l")  
                    if pv >0: 
                      pv =-2 
                    else:
                      pv = -5
                elif event.key==K_RIGHT:
                    if pv <0:
                        pv=2
                    else:    
                        pv =5 

if __name__ == "__main__":
    main()



0
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2