1. 程式人生 > >【原創】pygame學習筆記(3)--triviagame答題遊戲

【原創】pygame學習筆記(3)--triviagame答題遊戲

 

一 容易出錯的地方

def _init_(self,name,score)

要記住, __init__ 前後都是兩個下劃線,而不只是1個下劃線

 

二 程式碼測試

顯示效果正常了,可以玩了

現在題目會迴圈玩

# -*- coding:utf-8 -*-

import sys
import pygame
from pygame.locals import *

class Trivia(object):
	def __init__(self,filename):
		self.data=[]
		self.current=0
		self.total=0
		self.correct=0
		self.score=0
		self.scored=False
		self.failed=False
		self.wronganswer=0
		self.colors=[white,white,white,white]
		
		#read trivia data from filename
		f=open("temp\\pygame4_2.txt","r")
		trivia_data=f.readlines()
		f.close()

		#count and clean up trivia data
		for text_line in trivia_data:
			self.data.append(text_line.strip())
			self.total+=1	

	def show_question(self):
		print_text(font1,210,5,"trivia game")
		print_text(font2,190,500-20,"Press Key (1-4) To Answer",purple)
		print_text(font2,530,5,"score",purple)
		print_text(font2,550,25,str(self.score),purple)
	
		#get correct answer out of data(first)
		self.correct=int(self.data[self.current+5])
	
		#display question
		question=self.current//6+1
		print_text(font1,5,80,"question"+str(question))
		print_text(font2,20,120,self.data[self.current],yellow)

		#respond to correct answer
		if self.scored:
			self.colors=[white,white,white,white]
			self.colors[self.correct-1]=green
			print_text(font1,230,380,"correct",green)
			print_text(font2,170,420,"press enter for next question",green)
		elif self.failed:
			self.colors=[white,white,white,white]
			self.colors[self.correct-1]=red
			print_text(font1,230,380,"incorrect",red)
			print_text(font2,170,420,"press enter for next question",red)		

		
		#display answer
		print_text(font1,5,170,"answers")
		print_text(font2,20,210,"1-"+self.data[self.current+1],self.colors[0])
		print_text(font2,20,240,"2-"+self.data[self.current+2],self.colors[1])	
		print_text(font2,20,270,"3-"+self.data[self.current+3],self.colors[2])	
		print_text(font2,20,300,"4-"+self.data[self.current+4],self.colors[3])	
	
	
	def handle_input(self,number):
		if not self.scored and not self.failed:
			if number==self.correct:
				self.scored=True
				self.score+=1
			else:
				self.failed=True
				self.wronganswer=number

	def next_question(self):
		if self.scored or self.failed:
			self.scored=False
			self.failed=False
			self.correct=0
			self.colors=[white,white,white,white]
			self.current+=6
		if self.current>=self.total:
			self.current=0
			
		
#main progame begins
pygame.init()
screen=pygame.display.set_mode((600,500))
caption=pygame.display.set_caption("The Trivia Game")
font1=pygame.font.Font(None,40)
font2=pygame.font.Font(None,24)
white=255,255,255
cyan=0,255,255
yellow=255,255,0
purple=255,0,255
green=0,255,0
red=255,0,0




#load the trivia data file
trivia=Trivia("temp\\pygame4_2.txt")




			
def print_text(font,x,y,text,color=(255,255,255),shadow=True):
	if shadow:
		imgText=font.render(text,True,(0,0,0))
		screen.blit(imgText,(x-2,y-2))
	imgText=font.render(text,True,color)
	screen.blit(imgText,(x,y))



#repeating loop
while True:
	for event in pygame.event.get():
		if event.type==QUIT:
			sys.exit()
		elif event.type==KEYDOWN:
			if event.key ==pygame.K_ESCAPE:
				sys.exit()
			elif event.key==pygame.K_1:
				trivia.handle_input(1)
			elif event.key==pygame.K_2:
				trivia.handle_input(2)				
			elif event.key==pygame.K_3:
				trivia.handle_input(3)
			elif event.key==pygame.K_4:
				trivia.handle_input(4)
			elif event.key==pygame.K_RETURN:
				trivia.next_question()

	#clear the screen
	screen.fill((0,0,200))
	
	#display trivia_data
	trivia.show_question()
	
	#update the display
	pygame.display.update()
	

 

 

三 優化顯示

總覺得老外的這些遊戲,可以改編一下後,會變得好玩很多?