10回目:pygameでゲームを作成する|ウィンドウの表示

まずは、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ゲームで友人の評価をもらいましょう。)

参考サイト

メッセージウィンドウの表示

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA