¿Aún recuerdas los juegos de Windows que jugábamos en esos años? Hablando de los juegos que vienen con Windows, creo que muchos amigos nacidos en los años 80 y 90 los conocen. En los primeros días, cuando los juegos eran estériles, juegos como "Solitario" y "Buscaminas" nos ayudaron a traer mucha alegría a nuestras clases de microcomputadoras.
Feliz tiempo. Pero entre estos juegos, hay uno que no mucha gente parece entender, o incluso no saber jugar. este juego
Son Corazones.
Recientemente, después de que el editor lo estudió cuidadosamente por capricho, descubrí que este juego es realmente más divertido que otros juegos.
Alguno. Porque la jugabilidad de este juego se puede resumir simplemente en dos palabras: "hacer trampa" , y es el tipo de juego que obviamente hace trampa.
1. Abre el juego: haz doble clic en hongxindazhan.py y se ejecutará el programa principal.
2. Inicie el juego: escriba el nombre del jugador, cree una nueva identificación y haga clic en Confirmar para ingresar al juego.
3. Flujo del juego:
1) Cambiar cartas: selecciona tres cartas en tu mano y haz clic en el botón de arriba para completar el intercambio; 2) Jugar cartas: cuando sea el turno del jugador de jugar cartas, selecciona las cartas en tu mano y haz clic para jugarlas. (Consulte el apéndice para conocer las reglas específicas de juego de cartas) Nota: Cuando esta carta no se puede jugar en este momento, la barra de mensajes a continuación mostrará el motivo por el cual no se puede jugar.
4. Dividido sistemáticamente en etapas: después de una ronda del juego, aparecerá la tabla de puntuación, que muestra los puntos y los puntos totales de cada ronda para el jugador y las tres computadoras, y
La clasificación actual del jugador. (Consulte el apéndice para conocer reglas específicas para determinar la victoria o la derrota)
5. Barra de menú:
1) Barra de juegos: Juego nuevo (F2): haga clic para iniciar un juego nuevo. Puntuación (F4): haga clic para mostrar la tabla de puntuación. Música de fondo: haga clic para cambiar el interruptor de música. Opción (F5): Haga clic para modificar la velocidad de reproducción de la computadora. Salir: haz clic para salir del juego. 2) Barra de ayuda: Introducción a las reglas (F1): haga clic para mostrar reglas breves y condiciones ganadoras. Cita: haga clic para que aparezca una cita famosa.
6. Música de fondo: Reemplazo: Puede usar su propia música en formato wav para cambiarle el nombre a 'm1.wav' para reemplazar el archivo con el mismo nombre en el directorio del programa.
1. Antes de jugar, debes decidir quién será el crupier. En el ordenador, el banquero se sienta al sur. 2. Después de tener una mano de cartas (13 cartas en total), el repartidor primero debe seleccionar tres cartas y pasarlas a otros oponentes. En la primera ronda, las cartas se pasan al jugador de la izquierda; en la segunda ronda, las cartas se pasan al jugador de la derecha; en la tercera ronda, las cartas se pasan al jugador sentado enfrente en la cuarta; ronda, no se pasan cartas, etc. Después de recibir el pase del crupier, también deberá devolver tres cartas al crupier a voluntad. En la computadora, si desea seleccionar una tarjeta, simplemente haga clic en la tarjeta correspondiente. Para anular la selección de una tarjeta, haga clic nuevamente. 3. El jugador que atrape el 2 de tréboles debe jugar primero el 2 de tréboles, que es el primer ataque. 4. Luego juega las cartas en el sentido de las agujas del reloj. Cada jugador, por turno, debe robar cartas del mismo palo. Si no hay cartas del mismo palo que la carta repartida, se puede jugar cualquier carta. La única excepción es que no se puede jugar un Corazón o una Reina de Picas (comúnmente conocido como "Cerdo") en la primera ronda. Nota: La carta más alta entre las cartas del mismo palo jugadas ganará esta ronda, y el jugador que gane la carta jugará la carta primero en la siguiente ronda. Sólo después de que los corazones se hayan jugado antes, se pueden sacar los corazones (a menos que solo haya cartas de un palo en la mano, corazones). 5. Al final de cada ronda del juego, cada corazón rojo vale 1 punto y la "Reina de espadas (Cerdo)" vale 13 puntos. El juego continuará hasta que alguien consiga 100 puntos o más o el crupier abandone el juego. Si todos los corazones y la "Reina de Picas" se ganan en una ronda (llamada "atrapar"), el jugador que "atrapa" obtiene cero puntos y los jugadores restantes obtienen cada uno 26 puntos. Cuanto menor sea la puntuación, mejor para este juego.
▲ Instalación del entorno El entorno de ejecución utilizado en este artículo: Python3.7, Pycharm Community Edition 2020, módulo tkinter, parte
El módulo incorporado se puede importar directamente sin instalación. (Si necesitas instalar software, activar códigos o tienes problemas, puedes enviarme un mensaje privado
¡Ja! ) Instalación del módulo: pip install -i
https://pypi.douban.com/simple/ + nombre del módulo
El fondo verde más original. (Solo se muestra el fondo, el resto de las imágenes no se muestran) La referencia es la segunda imagen en la parte superior.
Sólo se muestra el código fuente del programa principal. ¡Cada línea de código está comentada para que pueda mostrarse directamente! ¡Vea el código fuente completo al final del artículo!
desde Tkinter import * desde tkFont import * import winsound desde tkMessageBox import * desde internal import * desde dialog import * #Creación de la interfaz principal del juego classGameFrame:def__init__(self,game,bgimg):#game, objeto de clase de juego bgimg, imagen de fondo self; .master = game.root #Crea un lienzo y dibuja el fondo self.c = Canvas(self.master,width = 1024,height = 640) self.c.create_image(514,322,image=bgimg) self.c.pack( ) # Crear una barra de estado self.status = Label(self.master,text="¡Bienvenido a Heart War!", bd=1,relief=SUNKEN,anchor=W) self.status.pack(fill = X) # Abra el cuadro de diálogo de inicio startdialog = StartDialog(self.master,"Hearts") ifstartdialog.isCancel:game.cancel() else:self.gamemodetext = ['Pasar a la izquierda', 'Pasar a la derecha', 'Cruzar- cambio'] self.name = [startdialog.name,'Oeste','Norte','Este'] self.handXY = [[346.5,490,1,0],[20,135,0,1], [586.5, 20,-1,0 ],[913,375,0,-1]] nombre propioXY = [[-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* [''] para inrange(52): self.img [i] = PhotoImage( archivo = 'tarjeta\%s.pgm'% (i)) self.img[52] = PhotoImage(archivo = 'back.pgm') self.scorelist = [] self.cards = [ ] self.gamemode = 0self .speed = 100self.wait = self.speed self.isChanging = False self.iswait = False #Dibuja el nombre parai inrange(4): self.c.create_text(self.handXY[i][0 ]+self.nameXY[i ][0], self.handXY[i][1]+self.nameXY[i][1], relleno = 'blanco', texto = self.name[i], ancla = self .nameXY[i][2 ], font = Font(size=15,weight="bold")) #Crea una mano self.l = 52* [''] fori inrange(52): self.l[i] = Label(self.master, image=self.img[52],bd = -1) para inrange(13): self.l[i]['text'] = str(i) self.l[i]. bind("<Button-1 >",self.cardEvent) #Crea la tarjeta central self.ml = 4* [''] para inrange(4): self.ml[i] = Label(self.master,image= self.img[52],bd = -1) self.b = Button(self.master,width=15,command=self.buttonEvent) #Comienza una ronda de juego self.oneGameStart() defoneGameStart(self): #Create Objeto Onegame para obtener información de la tarjeta self.onegame = OneGame() #Obtener la mano del jugador y mostrar la mano = 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) #Ingrese a la etapa de cambio de tarjeta cuando el modo de juego sea 0, 1, 2 ifself. modo de juego! = 3: self.changeHands( ) else: self.onegame.changeCards([],3) self.isChanging = False self.leftCards = 13#Ingrese a la fase de juego de cartas, la computadora frente al jugador juega las cartas por sí mismo .playpreCards() defchangeHands(self): #Cambiar fase de tarjeta Inicialización correspondiente self.select = []#Tarjetas seleccionadas self.isChanging = True self.isOK = False s = [1,3,2] self.status['text' ] = 'Selecciona tres cartas para pasar' +self.name[s[self.gamemode]]+'. '#El botón de aviso muestra self.b['text'] = self.gamemodetext[self.gamemode] self.b.place(x = 460,y = 400) self.b['state'] = DISABLED defcardEvent(self , evento): #Evento de la tarjeta #Obtener la posición de la tarjeta i = int(event.widget['text']) ifnotself.isChanging: #Evento de la tarjeta en la etapa de juego de la tarjeta #No se jugará ninguna tarjeta mientras se espera. iswait:return#No se puede jugar La carta no se juega ifnotself.onegame.available(i): self.status['text'] = self.onegame.errorString returnself.onegame.playCard(i) #La carta jugada se muestra en el 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#La computadora detrás del jugador juega a las cartas self.iswait = True self.playlaterCards() self.status[' text'] = 'Waiting...'self .wait += 500+ 5* self.speed #Después de esperar un período de tiempo, la tarjeta central se borra y la computadora frente al jugador juega la tarjeta usted mismo. master.after(self.wait,self.playpreCards) self.wait = self.speed else: #Eventos de tarjeta en la etapa de cambio de tarjeta, rebotaron hacia abajo, cayeron rebotados ifnotself.isOK:ifi inself.select:self.select.remove( i) self.moveCard(0,i,0) self.b['estado '] = 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): #Evento del botón de aviso ifnotself.isOK: #Haga que la computadora cambie las tarjetas antes de cambiarlas para el intercambio propio. select = self.onegame.changeCards(self.select,self.gamemode) hand = self.onegame .getPlayerHand(0) para 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'] = ' Presione "OK" para aceptar la tarjeta aprobada . 'self.b['text'] = 'OK' self.isOK = True else: #Confirme después de cambiar las cartas, ingrese a la etapa de juego de cartas, la computadora frente al jugador juega las cartas para mí inself.select:self. moveCard(0,i,0) self.b.place_forget() self.isChanging = False self.leftCards = 13self.playpreCards() defplaypreCards(self): ifself.leftCards == 0: #Después de jugar las cartas, se obtienen las puntuaciones se agregarán y se mostrará el cuadro de diálogo de puntuación parai inrange (4): hand = self.onegame.p[i].scoreHand forj inrange(len(hand)): self.l[i*13+j][' image'] = self.img[hand[j]. id] self.moveCard(i,j,0) puntuación = self.onegame.getScore() self.scorelist.append(score) iflen(self.scorelist) != 1: para inrange(4): self.scorelist[- 1][i] += self.scorelist[-2][i] self.status['text'] = 'Score'scoredialog = self.showScoreDialog() # Inicialice después de confirmar la puntuación y comience una nueva ronda del juego 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] para inrange(4): self.ml[i].place_forget() self.oneGameStart() else: # Obtenga la tarjeta de computadora anterior del jugador y muéstrela para 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): #Obtén las tarjetas de computadora del jugador y muéstralas 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, jugador; j, qué carta; estado, rebotar o dejar # movimiento de la carta self.l[i*13+j].place_forget() x0= self.handXY[i][0] + self. manoXY[i][2]*j*20y0 = self.manoXY[i][1] + self.manoXY[i][3]*j*20self.l[i*13+j].lugar(x = x0 ,y = y0- estado * 20) defnewGame( self): #Nuevo juego self.scorelist = [] self.gamemode = 0fori inrange(52): self.l[i].place_forget() self.l[i][ 'imagen'] = self.img[52] para inrange(4): self.ml[i].place_forget() self.oneGameStart() defshowScoreDialog(self): #Mostrar diálogo de puntuación scoringdialog = ScoreDialog(self.master,self .scorelist,self.name) devuelvecoredialog defshowMiddleCard( self): #Visualización de tarjeta central 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() mano = self.onegame.getPlayerHand(p) self.ml[i]['image'] = self.img[mano[j] ].id] self.ml[i] .place(x = self.middleXY[p][0], y = self.middleXY[p][1]) defender(self): #Cambiar desde que la computadora termina de jugar cards para cuando el jugador juega cartas self.iswait = False self status['text'] = 'Por favor, juega una carta. '#Crea una ventana de juego y crea un elemento de menú del juego classGame:def__init__(self): #Crea una ventana raíz y establece self.root = Tk() self.root.title("Corazones") self.root.geometry(' + 150+10') self.root.resizable(False, False) #Reproducir música de fondo self.s = winsound.PlaySound('m1.wav', winsound.SND_ASYNC+winsound.SND_LOOP) #Crear menú m = Menú(self . root) self.root['menu'] = m gamemenu = Menú(m) helpmenu = Menu(m) m.add_cascade(label = 'Juego',menu = gamemenu) m.add_cascade(label = 'Ayuda',menu = helpmenu) gamemenu.add_command(label="Nuevo juego F2",command = self.gameEvent1) gamemenu.add_separator() gamemenu.add_command(label="Puntuación... F4",command = self.gameEvent2) gamemenu.add_command( etiqueta ="Opción... F5", comando = self.gameEvent4) self.v = IntVar() self.v.set(1) gamemenu.add_checkbutton(label="Música de fondo", variable = self.v, comando = self .gameEvent3) gamemenu.add_separator() gamemenu.add_command(label="Salir",command = self.cancel) helpmenu.add_command(label="Introducción a las reglas... F1",command = self.helpEvent1) helpmenu.add_command (label ="Cita...",comando = 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 imagen de fondo bgimg = PhotoImage( file = 'bg.gif') #Crear la interfaz principal self.frame = GameFrame(self,bgimg) #Bucle principal self.root.mainloop() defgameEvent1(self,event=None): #Elemento del menú del juego "Nuevo Game" flag = Askokcancel('Nuevo juego', '¿Estás seguro de que quieres abandonar el juego actual y comenzar uno nuevo? ') ifflag:self.frame.newGame() defgameEvent2(self,event=None): #Elemento del menú del juego "Puntuación" self.frame.showScoreDialog() defgameEvent3(self): #Elemento del menú del juego "Música de fondo" 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= Ninguno): #Elemento del menú del juego "opción" optionDialog = OptionDialog(self.root,self.frame.speed / 100- 1) ifnotoptionDialog.isCancel:self.frame.speed = 100+ optionDialog.v.get() * 100defhelpEvent1( self, event=None): #Elemento del menú Ayuda" introducción a la regla "HelpDialog(self.root) defhelpEvent2(self): #Elemento del menú Ayuda" dicho famoso "SayDialog(self.root) defcancel(self): #Apaga la música y salga del juego winsound.PlaySound(self.s,winsound.SND_PURGE) self.root.destroy() defmain(): Game() if__name__== '__main__': main()
La tecnología cambia cada día que pasa. Los "grandes ladrillos" de escritorio se han convertido en un instante en tabletas portátiles. Las personas que en aquel entonces jugaban en secreto a estos juegos integrados.
Ya sea convirtiéndose en una nueva persona en el lugar de trabajo o convirtiéndose en padre, todos han comenzado sus propias nuevas etapas, ¡y estos juegos también han completado sus misiones!
¿Cuál era tu juego favorito cuando eras adolescente? Por cierto, he escrito sobre muchos juegos antes. Si necesitas el código fuente, ¡recuerda pedírmelo!