python games development

Posted by minorgod on Sun, 08 Mar 2020 12:29:59 +0100

1 word guessing game

  • The game introduce: guess the word game is to calculate the soap machine to produce a word randomly, disorder the alphabet order, for the player to guess. This game uses the control character interface. In the game, tuples in the sequence can be used to store all the words to be guessed. Because the game of guessing words needs to randomly generate a word to be guessed and a random number, random module random number function is introduced. random.choice() can randomly select elements from a sequence.

Run code

from tkinter import *
import random
n=52
def gen_pocker(n):
    x=100
    while(x>0):
        x=x-1
        p1=random.randint(0,n-1)
        p2=random.randint(0,n-1)
        t=pocker[p1]
        pocker[p1]=pocker[p2]
        pocker[p2]=t
    return pocker
pocker=[i for i in range(n)]
pocker=gen_pocker(n)
print(pocker)

(player1,player2,player3,player4)=([],[],[],[])
(p1,p2,p3,p4)=([],[],[],[])
root=Tk()
# Create a Canvas with a white background
cv=Canvas(root,bg='white',width=700,height=600)
imgs=[]
for i in range(1,5):
    for j in range(1,14):
        imgs.insert((i-1)*13+(j-1),PhotoImage(file='images\\'+str(i)+'-'+str(j)+'.gif'))
for x in range(13):           #The 13 round
    m=x*4
    p1.append(pocker[m])
    p2.append(pocker[m+1])
    p3.append(pocker[m+2])
    p4.append(pocker[m+3])
p1.sort()
p2.sort()
p3.sort()
p4.sort()
for x in range(0,13):
    img=imgs[p1[x]]
    player1.append(cv.create_image((200+20*x,80),image=img))
    img = imgs[p2[x]]
    player1.append(cv.create_image((100,150+20*x), image=img))
    img = imgs[p3[x]]
    player1.append(cv.create_image((200 + 20 * x, 500), image=img))
    img = imgs[p4[x]]
    player1.append(cv.create_image((560,150+20*x), image=img))
print("player1:",player1)
print("player2:",player2)
print("player3:",player3)
print("player4:",player4)
cv.pack()
root.mainloop()




















Run screenshots

2 licensing game

  • The game is introduced: four famous brand players play cards, the computer randomly gives 52 cards (not big, Wang) to four players, and displays each player's cards on the screen.

Run code

# Card Moudule
# Basic classes for a game with playing cards
class Card():
    """ A Playing card"""
    RANKS = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    SUITS = ["Plum blossom","square","red","black"]

    def __init__(self,rank,suit,face_up = True):
        self.rank = rank
        self.suit = suit
        self.is_face_up = face_up

    def __str__(self):
        if self.is_face_up:
            rep = self.suit + self.rank
        else:
            rep = "XX"
        return rep

    def flip(self):
        self.is_face_up = not self.is_face_up

    def pic_order(self):
        if self.rank == "A":
            FaceNum = 1
        elif self.rank == "J":
            FaceNum = 11
        elif self.rank == "Q":
            FaceNum = 12
        elif self.rank == "K":
            FaceNum = 13
        else:
            FaceNum = int(self.rank)
        if self.suit == "Plum blossom":
            Suit = 1
        elif self.suit == "square":
            Suit = 2
        elif self.suit == "red":
            Suit = 3
        else:
            Suit = 4
        return (Suit - 1) * 13 + FaceNum
class Hand():
    """A hand of plating card"""
    def __init__(self):
        self.cards = []

    def __str__(self):
        if self.cards:
            rep = ""
            for card in self.cards:
                rep += str(card) + "\t"
        else:
            rep = "No cards"
        return  rep

    def clear(self):
        self.cards = []

    def add(self, card):
        self.cards.append(card)

    def give(self,card,other_hand):
        self.cards.remove(card)
        other_hand.add(card)

class Poke(Hand):
    """A deck of playing cards"""
    def populate(self):
        for suit in Card.SUITS:
            for rank in Card.RANKS:
                self.add(Card(rank,suit))

    def shuffle(self):
        import random
        random.shuffle(self.cards)

    def deal(self, hands, per_hand = 13):
        for rounds in range(per_hand):
            for hand in hands:
                top_card = self.cards[0]
                self.cards.remove(top_card)
                hand.add(top_card)

if __name__ == "__main__":
    print("This is a module with classes for playing cards.")
    players = [Hand(),Hand(),Hand(),Hand()]
    poke1 = Poke()
    poke1.populate()
    poke1.shuffle()
    poke1.deal(players,13)
    n=1
    for hand in players:
        print("card-game competitor",n,end=":")
        print(hand)
        n=n+1
    input("\nPress the enter key to exit.")






Run screenshots

3 guess the number game

  • Game introduction: in the game, the program randomly generates numbers within 1024, and then lets the players guess. If the number of guesses is too large or too small, it will prompt, and the program will also count the number of guesses. Use Tkinter to develop a number guessing game.

Run code

import tkinter as tk
import sys
import random
import  re

number=random.randint(0,1024)
running=True
num=0
nmaxn=1024
nmin=0

def eBtnClose(event):
    root.destroy()
def eBtnGuess(event):
    global nmaxn
    global nmin
    global num
    global running
    if running:
        val_a=int(entry_a.get())
        if val_a==number:
            labelqval("Congratulations!")
            num+=1
            running=False
            numGuess()
        elif val_a<number:
            if val_a>nmin:
                nmin=val_a
                num+=1
                label_tip_min.config(label_tip_min,text=nmin)
            labelqval("Small.")
        else:
            if val_a <nmaxn:
                nmaxn = val_a
                num += 1
                label_tip_max.config(label_tip_max, text=nmaxn)
            labelqval("Oh, big.")
    else:
        labelqval("You're right")
def numGuess():
    if num==1:
        labelqval("You're right!")
    elif num<10:
        labelqval("==Within ten times, I got the right answer... Number of attempts:"+str(num))
    elif num<50:
        labelqval("OK, number of attempts:"+str(num))
    else:
        labelqval("ok You've done it more than 50 times... Number of attempts:"+str(num))
def labelqval(vText):
    label_val_q.config(label_val_q,text=vText)
root=tk.Tk(className="Figure guessing game")
root.geometry("400x90+200+200")

line_a_tip=tk.Frame(root)
label_tip_max=tk.Label(line_a_tip,text=nmaxn)
label_tip_min=tk.Label(line_a_tip,text=nmin)
label_tip_max.pack(side="top",fill="x")
label_tip_min.pack(side="bottom",fill="y")
line_a_tip.pack(side="left",fill="y")

line_question=tk.Frame(root)
label_val_q=tk.Label(line_question,width="80")
label_val_q.pack(side="left")
line_question.pack(side="top",fill="x")

line_input=tk.Frame(root)
entry_a=tk.Entry(line_input,width="40")
btnguess=tk.Button(line_input,text="guess")
entry_a.pack(side="left")
entry_a.bind('<Return>',eBtnGuess)
btnguess.bind('<Button-1>',eBtnGuess)
btnguess.pack(side="left")
line_input.pack(side="top",fill="x")

line_btn=tk.Frame(root)
btnClose=tk.Button(line_btn,text="Close")
btnClose.bind('<Button-1>',eBtnClose)
btnClose.pack(side="left")
line_btn.pack(side="top")

labelqval("Please input 0-1024 Any integer between:")
entry_a.focus_set()
print(number)
root.mainloop()





Run screenshots

4 graphic licensing game

  • Introduction to the game: 52 cards (excluding king and Wang) will be randomly distributed to four players, and the cards of each player will be displayed on the screen. The operation effect of the program is shown in Figure 5-1. Next, we use Canvas to draw Tkinter module graphics as an example to introduce the method of building a simple GUI (graphical user interface) game interface.

Run code

from tkinter import *
import random
n=52
def gen_pocker(n):
    x=100
    while(x>0):
        x=x-1
        p1=random.randint(0,n-1)
        p2=random.randint(0,n-1)
        t=pocker[p1]
        pocker[p1]=pocker[p2]
        pocker[p2]=t
    return pocker
pocker=[i for i in range(n)]
pocker=gen_pocker(n)
print(pocker)

(player1,player2,player3,player4)=([],[],[],[])
(p1,p2,p3,p4)=([],[],[],[])
root=Tk()
# Create a Canvas with a white background
cv=Canvas(root,bg='white',width=700,height=600)
imgs=[]
for i in range(1,5):
    for j in range(1,14):
        imgs.insert((i-1)*13+(j-1),PhotoImage(file='images\\'+str(i)+'-'+str(j)+'.gif'))
for x in range(13):           #The 13 round
    m=x*4
    p1.append(pocker[m])
    p2.append(pocker[m+1])
    p3.append(pocker[m+2])
    p4.append(pocker[m+3])
p1.sort()
p2.sort()
p3.sort()
p4.sort()
for x in range(0,13):
    img=imgs[p1[x]]
    player1.append(cv.create_image((200+20*x,80),image=img))
    img = imgs[p2[x]]
    player1.append(cv.create_image((100,150+20*x), image=img))
    img = imgs[p3[x]]
    player1.append(cv.create_image((200 + 20 * x, 500), image=img))
    img = imgs[p4[x]]
    player1.append(cv.create_image((560,150+20*x), image=img))
print("player1:",player1)
print("player2:",player2)
print("player3:",player3)
print("player4:",player4)
cv.pack()
root.mainloop()





Run screenshots

5 character puzzle

  • The game is introduced: the puzzle game divides a picture into several pieces and randomly scrambles them. When all pieces are put back to their original positions, the puzzle is completed (the game ends). This character puzzle game is composed of three lines and three columns. The blocks are arranged in random order. The player clicks around the blank blocks to exchange their positions until all the blocks return to their original positions. Jigsaw game operation interface.

Run code

from tkinter import *
from tkinter.messagebox import *
import random


root=Tk('Jigsaw puzzle')
root.title("Jigsaw puzzle")
#  Load external image
Pics=[]
for i in range(9):
    filename='woman\\woman_'+str(i+1)+'.png'
    Pics.append(PhotoImage(file=filename))
#  Define constants
#   Size of canvas
WIDTH=530
HEIGHT=705
# Side length of image block
IMAGE_WIDTH=WIDTH//3
IMAGE_HEIGHT=HEIGHT//3

#   Number of rows and columns on chessboard
ROWS=3
COLS=3
#   Mobile steps
steps=0
#  Save a list of all image blocks
board=[[0,1,2],
        [3,4,5],
        [6,7,8]]
#   Image block class
class Square:
    def __init__(self,orderID):
        self.orderID=orderID
    def draw(self,canvas,board_pos):
        img=Pics[self.orderID]
        canvas.create_image(board_pos,image=img)
#  Initialize the puzzle
def init_board():
    #   Scrambling image block coordinates
    L=list(range(8))
    L.append(None)
    random.shuffle(L)
    #  Filled puzzle
    for i in range(ROWS):
        for j in range(COLS):
            idx=i*ROWS+j
            orderID=L[idx]
            if orderID is None:
                board[i][j]=None
            else:
                board[i][j]=Square(orderID)
#  Reset game
def play_game():
    global steps
    steps=0
    init_board()

#   Draw game interface elements
def drawBoard(canvas):
    #  Draw a black box
    canvas.create_polygon((0,0,WIDTH,0,WIDTH,HEIGHT,0,HEIGHT),width=1,outline='Black',fill='green')
    #   Picture block
    #   The code is written here
    for i in range(ROWS):
        for j in range(COLS):
            if board[i][j] is not None:
                board[i][j].draw(canvas,(IMAGE_WIDTH*(j+0.5),IMAGE_HEIGHT*(i+0.5)))
def mouseclick(pos):
    global  steps
    #   Convert the click position to the coordinates on the puzzle board
    r=int(pos.y//IMAGE_HEIGHT)
    c=int(pos.x//IMAGE_WIDTH)
    print(r,c)
    if r<3 and c<3:
        if board[r][c] is None:
            return
        else:
            current_square=board[r][c]
            if r-1>=0 and board[r-1][c] is None:
                board[r][c]=None
                board[r-1][c]=current_square
                steps+=1
            elif c+1<=2 and board[r][c+1] is None:
                board[r][c] = None
                board[r][c+1] = current_square
                steps += 1
            elif r+1<=2 and board[r+1][c] is None:
                board[r][c] = None
                board[r+1][c] = current_square
                steps += 1
            elif c-1>=0 and board[r][c-1] is None:
                board[r][c] = None
                board[r][c-1] = current_square
                steps += 1
            #print(board)
            label1["text"]=str(steps)
            cv.delete('all')
            drawBoard(cv)
    if win():
        showinfo(title="Congratulations",message="You did it!")

def win():
    for i in range(ROWS):
        for j in range(COLS):
            if board[i][j] is not None and  board[i][j].orderID!=i*ROWS+j:
                return False
    return  True

def callBack2():
    print("Restart")
    play_game()
    cv.delete('all')
    drawBoard(cv)

#   Setup window
cv=Canvas(root,bg='white',width=WIDTH,height=HEIGHT)
b1=Button(root,text="Restart",command=callBack2,width=20)
label1=Label(root,text="0",fg="red",width=20)
label1.pack()
cv.bind("<Button-1>",mouseclick)

cv.pack()
b1.pack()
play_game()
drawBoard(cv)
root.mainloop()





Run screenshots

Topics: P4 Mobile