2時間ぐらいかけて作ってます。
まだキャラクターを色変えて表示ぐらいです。
ここから延々とキャラクターのAIと当たり判定などを作っていかないとシューティングにはなりません。
あと色を表示させる直前にピクセル単位で書き換えしているので遅いです。
今回つくるにあたってubuntuのテキストエディタで着手してしまって、tabとspaceの罠にはまって
IndentationError: expected an indented block
に15分以上悩まされ、atom使って修正してました。
あとpythonのandはビット演算してくれないので、&を使うようです。
field03.mp3はどこかからダウンロードしたものなので、手持ちの適当なmp3に変えてください。
作成時、2018年のワールドカップ予選をやっていたので主にテレビを見ながら
合間に作ってました。日本vsオーストラリア
ケーヒルってまだ代表なんだ。ちょっと驚きました。
スーケルとかケーヒルとか語呂的に日本サッカーの天敵感があります。
bg.png
のんびり動きます。
まだキャラクターを色変えて表示ぐらいです。
ここから延々とキャラクターのAIと当たり判定などを作っていかないとシューティングにはなりません。
あと色を表示させる直前にピクセル単位で書き換えしているので遅いです。
今回つくるにあたってubuntuのテキストエディタで着手してしまって、tabとspaceの罠にはまって
IndentationError: expected an indented block
に15分以上悩まされ、atom使って修正してました。
あとpythonのandはビット演算してくれないので、&を使うようです。
field03.mp3はどこかからダウンロードしたものなので、手持ちの適当なmp3に変えてください。
作成時、2018年のワールドカップ予選をやっていたので主にテレビを見ながら
合間に作ってました。日本vsオーストラリア
ケーヒルってまだ代表なんだ。ちょっと驚きました。
スーケルとかケーヒルとか語呂的に日本サッカーの天敵感があります。
bg.png
#!/usr/bin/python # -*- coding: utf-8 -*- import pygame from pygame.locals import * import random import numpy as np pygame.init() window_size = (640, 480) clock = pygame.time.Clock() screen = pygame.display.set_mode(window_size) img_char = pygame.image.load('bg.png') spimg = [] sx = 100 sy = 100 cmx = 100 ex = np.array([0 for i in range(cmx)]) ey = np.array([0 for i in range(cmx)]) et = np.array([0 for i in range(cmx)]) edx = np.array([0 for i in range(cmx)]) edy = np.array([0 for i in range(cmx)]) elv = np.array([0 for i in range(cmx)]) emx = np.array([0 for i in range(cmx)]) emy = np.array([0 for i in range(cmx)]) empw = np.array([0 for i in range(cmx)]) emdx = np.array([0 for i in range(cmx)]) emdy = np.array([0 for i in range(cmx)]) emlv = np.array([0 for i in range(cmx)]) mx = np.array([0 for i in range(cmx)]) my = np.array([0 for i in range(cmx)]) mpw = np.array([0 for i in range(cmx)]) mdx = np.array([0 for i in range(cmx)]) mdy = np.array([0 for i in range(cmx)]) mlv = np.array([0 for i in range(cmx)]) def rnd(n): return random.randrange(0, n) def eset(n, t, x, y, dx, dy): et[n] = t ex[n] = x ey[n] = y edx[n] = dx edy[n] = dy elv[n] = 1 def emset(n, pw, x, y, dx, dy): empw[n] = pw emx[n] = x emy[n] = y emdx[n] = dx emdy[n] = dy emlv[n] = 1 def mset(n, pw, x, y, dx, dy): mpw[n] = pw mx[n] = x my[n] = y mdx[n] = dx mdy[n] = dy mlv[n] = 1 def randset(): for n in range(cmx): if elv[n] == 0: eset(n, 1, rnd(640), rnd(480), rnd(5) - 2, rnd(5) - 2) for n in range(cmx): if emlv[n] == 0: emset(n, 1, rnd(640), rnd(480), rnd(5) - 2, rnd(5) - 2) for n in range(cmx): if mlv[n] == 0: mset(n, 1, rnd(640), rnd(480), rnd(5) - 2, rnd(5) - 2) def write(): bg_color = (0, 0, 0) screen.fill(bg_color) for n in range(cmx): if elv[n] > 0: spwrite2(21, ex[n], ey[n], 0, 2) for n in range(cmx): if emlv[n] > 0: spwrite2(22, emx[n], emy[n], 0, 2) for n in range(cmx): if mlv[n] > 0: spwrite2(22, mx[n], my[n], 0, 2) spwrite(20, sx, sy, 0, 2) pygame.display.flip() def move(): for n in range(cmx): if elv[n] > 0: ex[n] += edx[n] ey[n] += edy[n] for n in range(cmx): if emlv[n] > 0: emx[n] += emdx[n] emy[n] += emdy[n] for n in range(cmx): if mlv[n]>0: mx[n] += mdx[n] my[n] += mdy[n] def spset(): for y in range(10): for x in range(10): temp = pygame.Surface((16, 16), pygame.SRCALPHA) temp.blit(img_char, (0, 0), (x * 16, y * 16, 16, 16)) spimg.append(temp) def spwrite(cn, x, y, angle, scale): temp = pygame.transform.rotozoom(spimg[cn], angle, scale) screen.blit(temp, (x, y)) def spwrite2(cn, x, y, angle, scale): temp = pygame.transform.rotozoom(spcolor(spimg[cn],rnd(255),rnd(200),rnd(30)), angle, scale) screen.blit(temp, (x, y)) def spcolor(img,r,g,b): temp = pygame.Surface((16, 16), pygame.SRCALPHA) for x in range(16): for y in range(16): c=img.get_at((x,y)) c.r=c.r & r c.g=c.g & g c.b=c.b & b temp.set_at((x,y),(c.r,c.g,c.b,c.a)) return temp def main(): global sx global sy spset() randset() pygame.key.set_repeat (1, 1) pygame.mixer.music.load('field03.mp3') pygame.mixer.music.play(-1) end_game = False while not end_game: for event in pygame.event.get(): if event.type == pygame.QUIT: end_game = True if event.type == KEYDOWN: if event.key == K_LEFT: if sx>0: sx -= 5 if event.key == K_RIGHT: if sx<640-16: sx += 5 if event.key == K_UP: if sy>0: sy -= 5 if event.key == K_DOWN: if sy<480-16: sy += 5 move() write() pygame.quit() quit() main()
のんびり動きます。