まずは、test.mapファイルからマップを表示させるコードを記述しましょう。
# -*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys
import codecs
w,h=640,480
rect=Rect(0,0,w,h)
GS=32
class MAP:
def __init__(self,name):
self.name=name
self.TATE=-1
self.YOKO=-1
self.map=[]
def load(self):
fp=codecs.open(self.name,"r",'utf-8-sig')
lines=fp.readlines()
TATE,YOKO=lines[0].split()
self.TATE,self.YOKO=int(TATE),int(YOKO)
for line in lines[1:]:
line =line.rstrip()
self.map.append([int(x) for x in list(line)])
fp.close()
return self.map,self.TATE,self.YOKO
def map_img(filename):
image=pygame.image.load(filename).convert()
return image
def draw_map(screen,MapImg,map,TATE,YOKO):
for i in range(TATE):
for ix in range(YOKO):
if map[i][ix]==0:
screen.blit(MapImg,(ix*GS,i*GS))
def main():
pygame.init()
screen=pygame.display.set_mode(rect.size)
pygame.display.set_caption("ウィンドウの表示")
MapImg=map_img("d.png")
map,TATE,YOKO=MAP("test.map").load()
clock=pygame.time.Clock()
while(1):
clock.tick(60)
draw_map(screen,MapImg,map,TATE,YOKO)
pygame.display.update()
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if __name__=="__main__":
main()
これが基本形になります。
単純に外部ファイル(test.map)からマップを作成しているだけです。
キャラクターの生成はありません。
スポンサーリンク
ウィンドウを表示させる
ソースコード
# -*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys
import codecs
w,h=640,480
rect=Rect(0,0,w,h)
GS=32
class MAP:
def __init__(self,name):
self.name=name
self.TATE=-1
self.YOKO=-1
self.map=[]
def load(self):
fp=codecs.open(self.name,"r",'utf-8-sig')
lines=fp.readlines()
TATE,YOKO=lines[0].split()
self.TATE,self.YOKO=int(TATE),int(YOKO)
for line in lines[1:]:
line =line.rstrip()
self.map.append([int(x) for x in list(line)])
fp.close()
return self.map,self.TATE,self.YOKO
class Win:
haba=4 #白い枠の幅
def __init__(self,rect):
self.siro_rect=rect #白い枠の大きさ
self.kuro_rect=self.siro_rect.inflate(-self.haba*2,-self.haba*2)#黒枠の作成
self.is_visible=False
def draw_win(self,screen):
if self.is_visible==False: #draw_winを呼び出したときにFalseならばなにもしない
return
pygame.draw.rect(screen,(255,255,255),self.siro_rect,0)
pygame.draw.rect(screen,(0,0,0),self.kuro_rect,0)
def show(self):
self.is_visible=True
def hide(self):
self.is_visible=False
def map_img(filename):
image=pygame.image.load(filename).convert()
return image
def draw_map(screen,MapImg,map,TATE,YOKO):
for i in range(TATE):
for ix in range(YOKO):
if map[i][ix]==0:
screen.blit(MapImg,(ix*GS,i*GS))
def main():
pygame.init()
screen=pygame.display.set_mode(rect.size)
pygame.display.set_caption("ウィンドウの表示")
MapImg=map_img("d.png")
map,TATE,YOKO=MAP("test.map").load()
wnd=Win(Rect(140,334,360,140))
clock=pygame.time.Clock()
while(1):
clock.tick(60)
draw_map(screen,MapImg,map,TATE,YOKO)
wnd.draw_win(screen)
pygame.display.update()
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if event.type==KEYDOWN and event.key==K_ESCAPE:
sys.exit()
if event.type==KEYDOWN and event.key==K_SPACE:
if wnd.is_visible: #ウィンドウが表示されていれば
wnd.hide() #ウィンドウを隠す
else:
wnd.show()
if __name__=="__main__":
main()
これでウィンドウが表示されます。
重要なコードはこの2つです。
class Win:
haba=4 #白い枠の幅
def __init__(self,rect):
self.siro_rect=rect #白い枠の大きさ
self.kuro_rect=self.siro_rect.inflate(-self.haba*2,-self.haba*2)
self.is_visible=False
def draw_win(self,screen):
if self.is_visible==False:
return
pygame.draw.rect(screen,(255,255,255),self.siro_rect,0)
pygame.draw.rect(screen,(0,0,0),self.kuro_rect,0)
def show(self):
self.is_visible=True
def hide(self):
self.is_visible=False
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if event.type==KEYDOWN and event.key==K_ESCAPE:
sys.exit()
if event.type==KEYDOWN and event.key==K_SPACE:
if wnd.is_visible: #ウィンドウが表示されていれば
wnd.hide() #ウィンドウを隠す
else:
wnd.show()
イベントハンドラで、ウィンドウを出したりしまったりしています。
is_visibleで判別しています。
白い枠は外枠、黒い枠は内枠(文字を表示させるところ)です。
まとめ
ウィンドウなどホントに基本的なことですが、理解して実行するのはかなり大変です。
最終的には、iOS環境でゲームができるようになりたいなと思っているので、変換作業も必要になってくるでしょう。
最初は、.exeファイルでPC上でゲームができるようにしたいと思います。(まずはPCゲームで友人の評価をもらいましょう。)