基于Python如何实现彩票小游戏

寻技术 Python编程 2023年10月18日 83

本篇内容主要讲解“基于Python如何实现彩票小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python如何实现彩票小游戏”吧!

一、游戏规则

游戏里面有提前设置好的奖项,分为三个,一等奖,二等奖,三等奖,用户需要在14个随机数中,连续猜6次,每次填写一个1~14的数字,填写完数字之后使用键盘和鼠标点击,揭示中奖号码。如果猜中6个数字表示中一等奖,一等奖给用户加300积分。

5个数字表示中二等奖,二等奖给用户加200积分。4个数字表示中三等奖,三等奖给用户加100积分。除此之外表示不中奖,不中奖就会扣除用户的50积分,每揭示中奖号码一次,会要求用户输入是否继续。可以手动结束游戏,或者积分用完自动结束游戏。

二、环境准备

1)运行环境

开发环境:Python3、Pycharm社区版、Pygame,部分自带的模块安装Python即可使用。

2)模块安装

第三方库的安装方式如下:

一般安装:pip install +模块名

镜像源安装:pip install -i pypi.douban.com/simple/+模块名…

三、代码展示

1)导入库

import pygame
from pygame.locals import *
import sys,random,time,easygui

2)主程序

#pygame环境初始化
pygame.init()
#设置一个长为1250,宽为700的窗口
canvas = pygame.display.set_mode((600, 450))
canvas.fill([255,255,255])
# 设置窗口标题
pygame.display.set_caption("")
# 图片加载
bg1 = pygame.image.load('images/bg(1).jpg')
bg2 = pygame.image.load('images/bg(2).jpg')
ball  = pygame.image.load('images/ball.jpg')
h = pygame.image.load('images/h.jpg')
def handleEvent():
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
#专门写字
def write(str,x,y):
    text=pygame.font.SysFont('simsunnsimsun',30)
    laohu=text.render(str,True,(255,0,0))
    canvas.blit(laohu,(x,y))
def write2(str,x,y):
    text=pygame.font.SysFont('微软雅黑',60)
    laohu=text.render(str,True,(0,255,0))
    canvas.blit(laohu,(x,y))            
            
#变换状态            
def changestate():
    for event in pygame.event.get():
        if event.type==MOUSEBUTTONDOWN and event.button==1:
            if game.state==game.states[0]:
                game.state=game.states[1]
        if event.type==KEYDOWN and event.key==K_SPACE:
            if game.state==game.states[2]:
                game.state=game.states[3]
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
#用户类
class User():
    def __init__(self):
        self.socre=300
        self.numbers=[]
    def win(self,num):
        self.socre=self.socre+num
    def lose(self):
        self.socre=self.socre-50
user=User()

#创建ball类
class Ball():
    def __init__(self,x,y):
        self.img=ball
        self.x=x
        self.y=y
    def paint(self):
        canvas.blit(self.img,(self.x,self.y))
 
#创建游戏类       
class game():
    #0-5个状态
    states=['欢迎','投注','随机','依次停止','计算','是否']
    state=states[0]
    numbers=[]
    index=0
    
#创建ball对象
def creatball():
    game.balls=[Ball(30,350),
           Ball(130,350),
           Ball(230,350),
           Ball(330,350),
           Ball(430,350),
           Ball(530,350)]
    
#揭示号码
def removeball():
    for event in pygame.event.get():
        if event.type==MOUSEBUTTONDOWN and event.button==1:
            game.balls.pop(0)
            game.index+=1
#揭示数字:
def shownumber():
    write2(str(game.numbers[0]),30,350)
    write2(str(game.numbers[1]),130,350)
    write2(str(game.numbers[2]),230,350)
    write2(str(game.numbers[3]),330,350)
    write2(str(game.numbers[4]),430,350)
    write2(str(game.numbers[5]),530,350)
    
#产生6个不重复的随机数,添加到列表里,算法
def creatnumber():
    if not len(game.numbers)==0:
        game.numbers=[]       
    while True:
        num=random.randint(1,13)
        if not num in game.numbers:
            game.numbers.append(num)
        if len(game.numbers)==6:
            break

#清除用户数据
def clean_user():
    if len(user.numbers)==0:
        return 0
    else :
        for i in range(len(user.numbers)):
            user.numbers.pop() 
#固定的几个页面封装起来
def paint():
    canvas.blit(bg1,(0,0))
    canvas.blit(bg2,(300,0))
    n=random.randint(0,14)
    write(str(n),110,90)
    write(str(n),410,90)
    for i in game.balls:
        i.paint()
    
#猜对了几个?
def jisuan():
    n=0
    t=True
    for i in user.numbers:
        for j in game.numbers:
            if i==j:
                n+=1
    if n==6:
        user.win(300)
    elif n==5:
        user.win(200)
    elif n==4:
        user.win(100)
    else :
        user.lose()
        t=False
    return t  
   
#用来在界面表达文字,数字等。
def conpaint():
    canvas.blit(h,(0,0))
    if game.state == game.states[0]:
        write('欢迎来到偷偷乐',200,100)
        write('请点击鼠标进入下一个环节!',70,300)
    elif game.state == game.states[1]:
        creatnumber()
        creatball()
        clean_user()
        game.index=0
        easygui.msgbox('您的积分为'+str(user.socre)+'
'+'祝您游戏愉快!!')
        for i in range(6):
            n=int(easygui.enterbox('请输入1-14中的一个数字'))
            user.numbers.append(n) 
        game.state=game.states[2]
    elif game.state == game.states[2]: 
        paint()
        write('请按下空格进入show环节',150,130)
    elif game.state == game.states[3]:
        shownumber()
        removeball()
        paint() 
        write('请点击鼠标揭示中奖号码!',150,130)
        if game.index==6:
            game.state=game.states[4]
    elif game.state==game.states[4]:
        shownumber()
        paint()
        if jisuan():
            easygui.msgbox('恭喜你中奖了,您的积分为'+str(user.socre))
        q=easygui.enterbox('是否继续?y/n')
        if q=='y':
            game.state=game.states[1]
        elif q=='n':
            easygui.msgbox('您最终积分为'+str(user.socre))
            game.state=game.states[5]
    elif game.state==game.states[5]:
        write('欢迎下次再来!!',200,100)

#总控制程序           
def control():
    if user.socre>0:
        conpaint()
        changestate()
    else :
        canvas.blit(h,(0,0))
        easygui.msgbox('您的积分已经用完')
        write('欢迎下次再来!!',200,100)
        time.sleep(2)

    
while True:
    control() 
    pygame.display.update()
    handleEvent()
关闭

用微信“扫一扫”