Você ainda se lembra dos jogos do Windows que jogávamos naquela época? Falando dos jogos que acompanham o Windows, acredito que muitos amigos nascidos nas décadas de 80 e 90 os conheçam. Nos primeiros dias, quando os jogos eram estéreis, jogos como “Paciência” e “Campo Minado” nos ajudaram a trazer muita alegria às nossas aulas de microinformática.
Tempo feliz. Mas entre esses jogos, há um que poucas pessoas parecem entender, ou mesmo saber jogar. este jogo
São corações.
Recentemente, depois que o editor o estudou cuidadosamente por capricho, descobri que este jogo é realmente mais divertido de jogar do que outros jogos.
Alguns. Porque a jogabilidade deste jogo pode ser simplesmente resumida em duas palavras: "trapaça" , e é o tipo de jogo que obviamente é trapaça.
1. Abra o jogo: clique duas vezes em hongxindazhan.py e o programa principal será executado!
2. Inicie o jogo: Digite o nome do jogador, crie um novo ID e clique em Confirmar para entrar no jogo.
3. Fluxo do jogo:
1) Trocar cartas: Selecione três cartas da sua mão e clique no botão acima para completar a troca; 2) Jogar cartas: Quando for a vez do jogador jogar cartas, selecione as cartas da sua mão e clique para jogá-las. (Veja o apêndice para regras específicas de jogo de cartas) Nota: Quando esta carta não puder ser jogada neste momento, a barra de aviso abaixo exibirá o motivo pelo qual ela não pode ser jogada.
4. Dividido sistematicamente em etapas: Após uma rodada do jogo, a tabela de pontuação aparecerá, mostrando os pontos e o total de pontos de cada rodada para o jogador e os três computadores, e
A classificação atual do jogador. (Veja o apêndice para regras específicas para determinar vitória ou derrota)
5. Barra de menu:
1) Barra de Jogo: Novo Jogo (F2): Clique para iniciar um novo jogo. Pontuação (F4): Clique para exibir a tabela de pontuação. Música de fundo: Clique para mudar a opção de música. Opção (F5): Clique para modificar a velocidade de reprodução do computador. Sair: Clique para sair do jogo. 2) Barra de ajuda: Introdução às regras (F1): Clique para exibir regras resumidas e condições de vitória. Citação: Clique para exibir uma citação famosa.
6. Música de fundo: Substituição: Você pode usar sua própria música em formato wav para renomeá-la para 'm1.wav' para substituir o arquivo com o mesmo nome no diretório do programa.
1. Antes de jogar, você precisa decidir quem é o dealer. No computador, o banqueiro fica ao sul. 2. Após obter uma mão de cartas (13 cartas no total), o dealer deve primeiro selecionar três cartas e passá-las para outros oponentes. Na primeira rodada as cartas são passadas para o jogador da esquerda; na segunda rodada as cartas são passadas para o jogador da direita na quarta rodada; rodada, nenhuma carta é passada e assim por diante. Depois de receber o passe do dealer, você também precisa devolver três cartas ao dealer à vontade. No computador, caso queira selecionar um cartão, basta clicar no cartão correspondente. Para desmarcar um cartão, clique novamente. 3. O jogador que pegar o 2 de paus deve jogar primeiro o 2 de paus, que é o primeiro ataque. 4. Em seguida, jogue as cartas no sentido horário. Cada jogador, por sua vez, deve comprar cartas do mesmo naipe. Se não houver cartas do mesmo naipe da carta distribuída, qualquer carta pode ser jogada. A única exceção é que uma Copa ou Dama de Espadas (comumente conhecida como "Porco") não pode ser jogada na primeira rodada. Nota: A carta mais alta entre as cartas do mesmo naipe jogadas vencerá esta rodada, e o jogador que ganhar a carta jogará a carta primeiro na próxima rodada. Somente depois de as copas terem sido jogadas antes, as copas podem ser retiradas (a menos que haja apenas cartas do mesmo naipe na mão, copas). 5. Ao final de cada rodada do jogo, cada coração vermelho vale 1 ponto, e a “Dama de Espadas (Porco)” vale 13 pontos. O jogo continuará até que alguém marque 100 pontos ou mais ou o dealer saia do jogo. Se todas as copas e a "Dama de Espadas" forem ganhas em uma rodada (chamada de "pegada"), o jogador "pegador" ganha zero pontos e os jogadores restantes ganham 26 pontos cada. Quanto menor a pontuação melhor para este jogo.
▲ Instalação do ambiente O ambiente de execução usado neste artigo: Python3.7, Pycharm Community Edition 2020, módulo tkinter, parte
O módulo integrado pode ser importado diretamente sem instalação. (Se precisar instalar software, ativar códigos ou encontrar problemas, você pode me enviar uma mensagem privada
ah! ) Instalação do módulo: pip install -i
https://pypi.douban.com/simple/ + nome do módulo
O fundo verde mais original. (Apenas o fundo é mostrado, o resto das imagens não são mostradas) A referência é a segunda imagem no topo
Apenas o código-fonte do programa principal é mostrado. Cada linha de código é comentada para que possa ser mostrada diretamente! Veja todo o código-fonte no final do artigo!
da importação do Tkinter * da importação do tkFont * importar winsound da importação do tkMessageBox * da importação interna * da importação do diálogo * #Game criação da interface principal classGameFrame:def__init__(self,game,bgimg):#game, Game class object bgimg, background image self; .master = game.root #Crie uma tela e desenhe o fundo self.c = Canvas(self.master,width = 1024,height = 640) self.c.create_image(514,322,image=bgimg) self.c.pack( ) # Crie uma barra de status self.status = Label(self.master,text="Bem-vindo à Guerra do Coração!", bd=1,relief=SUNKEN,anchor=W) self.status.pack(fill = X) # Abra a caixa de diálogo inicial startdialog = StartDialog(self.master,"Hearts") ifstartdialog.isCancel:game.cancel() else:self.gamemodetext = ['Pass to the left', 'Pass to the right', 'Cross- alterar'] self.name = [startdialog.name,'Oeste','Norte','Leste'] self.handXY = [[346.5,490,1,0],[20,135,0,1], [586,5, 20,-1,0 ],[913,375,0,-1]] self.nomeXY = [[-20,130,SE],[0,-20,SW],[91+20,0,NW],[91,130 +20,NE]] self.middleXY = [[466.5.330],[411.255],[466.5.180],[522.255]] self.img = 53* [''] fori inrange(52): self.img [i] = PhotoImage( arquivo = 'card\%s.pgm'% (i)) self.img[52] = PhotoImage(file = 'back.pgm') self.scorelist = [] self.cards = [ ] self.gamemode = 0self .speed = 100self.wait = self.speed self.isChanging = False self.iswait = False #Desenhe o nome parai inrange(4): self.c.create_text(self.handXY[i][0 ]+self.nameXY[i ][0], self.handXY[i][1]+self.nameXY[i][1], fill = 'branco', texto = self.name[i], âncora = self .nameXY[i][2 ], font = Font(size=15,weight="bold")) #Crie uma mão self.l = 52* [''] fori inrange(52): self.l[i] = Label(self.master, image=self.img[52],bd = -1) fori inrange(13): self.l[i]['text'] = str(i) self.l[i]. bind("<Button-1 >",self.cardEvent) #Crie o cartão central self.ml = 4* [''] fori inrange(4): self.ml[i] = Label(self.master,image= self.img[52],bd = -1) self.b = Button(self.master,width=15,command=self.buttonEvent) #Uma rodada de jogo começa self.oneGameStart() defoneGameStart(self): #Create Objeto Onegame para obter informações da carta self.onegame = OneGame() #Pegue a mão do jogador e exiba a mão = self.onegame.getPlayerHand(0) fori inrange(13): self.l[i]['image'] = self .img[hand[i] .id] fori inrange(4): forj inrange(13): self.moveCard(i,j,0) #Entre no estágio de troca de cartas quando o modo de jogo for 0, 1, 2 ifself. gamemode!= 3: self.changeHands() else: self.onegame.changeCards([],3) self.isChanging = False self.leftCards = 13#Entre na fase de jogo de cartas, o computador na frente do jogador joga cartas sozinho .playpreCards() defchangeHands(self): #Mudar fase do cartão Inicialização correspondente self.select = []#Cartões selecionados self.isChanging = True self.isOK = False s = [1,3,2] self.status['text' ] = 'Por favor, selecione três cartas para passar' +self.name[s[self.gamemode]]+'. '#O botão de prompt exibe self.b['text'] = self.gamemodetext[self.gamemode] self.b.place(x = 460,y = 400) self.b['state'] = DISABLED defcardEvent(self , evento): #Evento da carta #Obtém a posição da carta i = int(event.widget['text']) ifnotself.isChanging: #Evento da carta na fase de jogo de cartas #Nenhuma carta será jogada enquanto espera. iswait:return#Não pode ser jogado A carta não foi jogada ifnotself.onegame.available(i): self.status['text'] = self.onegame.errorString returnself.onegame.playCard(i) #A carta jogada é exibida em o centro event.widget.place_forget() self .ml[self.turn]['image'] = event.widget['image'] self.ml[self.turn].place(x = self.middleXY[0] [0],y = self.middleXY[ 0][1]) self.turn += 1self.leftCards -= 1#O computador atrás do jogador joga cartas self.iswait = True self.playlaterCards() self.status[' text'] = 'Waiting...'self .wait += 500+ 5* self.speed #Depois de esperar por um período de tempo, a carta central é limpa e o computador na frente do jogador joga a carta sozinho. master.after(self.wait,self.playpreCards) self.wait = self.speed else: #Eventos de cartão no estágio de troca de cartão, rebatidos, descartados e rebatidos ifnotself.isOK:ifi inself.select:self.select.remove( i) self.moveCard(0,i,0) self.b['state '] = DISABLED else:iflen(self.select) < 3: self.select.append(i) self.moveCard(0,i,1 ) iflen(self.select) == 3: self.b['state' ] = NORMAL defbuttonEvent(self): #Prompt button event ifnotself.isOK: #Faça com que os cartões sejam trocados pelo computador antes de trocá-los para troca própria. select = self.onegame.changeCards(self.select,self.gamemode) hand = self.onegame .getPlayerHand(0) fori inrange(13): self.l[i]['image'] = self.img[hand[ i].id] self.moveCard(0,i,0) fori inself.select:self .moveCard(0,i,1) self.status['text'] = ' Por favor, pressione "OK" para aceitar o cartão passado . 'self.b['text'] = 'OK' self.isOK = True senão: #Confirme após trocar as cartas, entre na fase de jogo de cartas, o computador na frente do jogador joga as cartas parai inself.select:self. moveCard(0,i ,0) self.b.place_forget() self.isChanging = False self.leftCards = 13self.playpreCards() defplaypreCards(self): ifself.leftCards == 0: #Depois que as cartas são jogadas, as pontuações será agregado e a caixa de diálogo de pontuação será exibida parai inrange (4): hand = self.onegame.p[i].scoreHand forj inrange(len(hand)): self.l[i*13+j][' imagem'] = self.img[hand[j].id] self.moveCard(i,j,0) pontuação = self.onegame.getScore() self.scorelist.append(score) iflen(self.scorelist) != 1: fori inrange(4): self.scorelist[- 1][i] += self.scorelist[-2][i] self.status['text'] = 'Score'scoredialog = self.showScoreDialog() # Inicialize após a pontuação ser confirmada e inicie uma nova rodada do jogo ifscoredialog.isover :self.scorelist = [] self.gamemode = 0else:self.gamemode = (self.gamemode + 1) % 4fori inrange(52): self. l[i].place_forget() self.l[i]['image '] = self.img[52] fori inrange(4): self.ml[i].place_forget() self.oneGameStart() else: # Obtenha a placa de computador anterior do jogador e exiba-a parai inrange(4): self .ml[i].place_forget() self.turn = 0preCards = self.onegame.preCard iflen(preCards) == 0: self.end() else :fori inrange(len(preCards)): p,j = preCards[ i][0],preCards[i][1] self.cards.append([self.turn,p,j]) self.master.after (self.wait,self.showMiddleCard) ifp == 3: self.master.after(self.wait,self.end) self.wait = self.speed else:self.wait += self.speed self.turn += 1defplaylaterCards(self): #Pegue as cartas de computador do jogador e exiba-as laterCards = self.onegame.laterCard fori inrange(len(laterCards)): p,j = laterCards[i][0],laterCards[i][1] self .cards.append([self.turn,p,j] ) self.master.after(self.wait,self.showMiddleCard) self.wait += self.speed self.turn += 1defmoveCard(self,i,j, estado):#i, jogador; j, qual carta ;estado, saltar ou largar # movimento da carta self.l[i*13+j].place_forget() x0= self.handXY[i][0] + self. mãoXY[i][2]*j*20y0 = self.handXY[i][1] + self.handXY[i][3]*j*20self.l[i*13+j].place(x = x0 ,y = y0- estado * 20) defnewGame( self): #Novo jogo self.scorelist = [] self.gamemode = 0fori inrange(52): self.l[i].place_forget() self.l[i][ 'image'] = self.img[52] fori inrange(4): self.ml[i].place_forget() self.oneGameStart() defshowScoreDialog(self): #Exibir diálogo de pontuação scoredialog = ScoreDialog(self.master,self .scorelist,self.name) retornacoredialog defshowMiddleCard( self): #Exibição central do cartão i = self.cards[0][0] p = self.cards[0][1] j = self.cards[0][2] del self.cards[0] self.l [p*13+j].place_forget() mão = self.onegame.getPlayerHand(p) self.ml[i]['image'] = self.img[mão[j .id] self.ml[i] .place(x = self.middleXY[p][0], y = self.middleXY[p][1]) defender(self): #Mudando de quando o computador termina de jogar cartas para quando o jogador joga cartas self.iswait = False self['text'] = 'Por favor, jogue uma carta. '#Crie uma janela de jogo e crie um item de menu de jogo classGame:def__init__(self): #Crie uma janela raiz e defina self.root = Tk() self.root.title("Hearts") self.root.geometry(' + 150+10') self.root.resizable(False, False) #Toca música de fundo self.s = winsound.PlaySound('m1.wav', winsound.SND_ASYNC+winsound.SND_LOOP) #Criar menu m = Menu(self .root) self.root['menu'] = m gamemenu = Menu(m) helpmenu = Menu(m) m.add_cascade(label = 'Jogo',menu = gamemenu) m.add_cascade(label = 'Ajuda',menu = helpmenu) gamemenu.add_command(label="Novo Jogo F2",command = self.gameEvent1) gamemenu.add_separator() gamemenu.add_command(label="Pontuação... F4",command = self.gameEvent2) gamemenu.add_command( label ="Opção... F5", comando = self.gameEvent4) self.v = IntVar() self.v.set(1) gamemenu.add_checkbutton(label="Música de fundo", variável = self.v, comando = self .gameEvent3) gamemenu.add_separator() gamemenu.add_command(label="Sair",command = self.cancel) helpmenu.add_command(label="Introdução às regras... F1",command = self.helpEvent1) helpmenu.add_command (rótulo ="Citação...",command = self.helpEvent2) self.root.bind('<F2>',self.gameEvent1) self.root.bind('<F4>',self.gameEvent2) self. root.bind('<F5>',self.gameEvent4) self.root.bind('<F1>',self.helpEvent1) self.root.protocol("WM_DELETE_WINDOW",self.cancel) #Importar imagem de fundo bgimg = PhotoImage( file = 'bg.gif') #Crie a interface principal self.frame = GameFrame(self,bgimg) #Loop principal self.root.mainloop() defgameEvent1(self,event=None): #Item de menu do jogo "Novo Game" flag = askokcancel('New Game', 'Tem certeza que deseja abandonar o jogo atual e iniciar um novo? ') ifflag:self.frame.newGame() defgameEvent2(self,event=None): #Item de menu do jogo "Pontuação" self.frame.showScoreDialog() defgameEvent3(self): #Item de menu do jogo "Música de fundo" ifself.v .get() == 0: winsound.PlaySound(self.s,winsound.SND_PURGE) else:self.s = winsound.PlaySound('m1.wav', winsound.SND_ASYNC+winsound.SND_LOOP) defgameEvent4(self,event= Nenhum): #Item de menu do jogo "opção" optionDialog = OptionDialog(self.root,self.frame.speed / 100- 1) ifnotoptionDialog.isCancel:self.frame.speed = 100+ optionDialog.v.get() * 100defhelpEvent1( self, event=None): #item de menu de ajuda" introdução à regra "HelpDialog(self.root) defhelpEvent2(self): #item de menu de ajuda" ditado famoso "SayDialog(self.root) defcancel(self): #Desligue a música e saia do jogo winsound.PlaySound(self.s,winsound.SND_PURGE) self.root.destroy() defmain(): Game() if__name__== '__main__': main()
A tecnologia está mudando a cada dia que passa. Os “grandes tijolos” dos desktops se transformaram em tablets portáteis em um instante. Pessoas que jogavam secretamente esses jogos integrados naquela época.
Quer se tornem uma nova pessoa no local de trabalho ou se tornem pais, todos iniciaram suas próprias novas etapas, e esses jogos também completaram suas missões!
Qual jogo era seu favorito quando você era adolescente? A propósito, já escrevi sobre muitos jogos antes. Se você precisar do código-fonte, lembre-se de obtê-lo comigo!