Apakah Anda masih ingat game Windows yang kami mainkan pada tahun-tahun itu? Berbicara tentang game-game yang hadir dengan Windows, saya yakin banyak teman-teman kelahiran tahun 80an dan 90an yang mengenalnya. Pada masa-masa awal ketika permainan masih tandus, permainan seperti "Solitaire" dan "Minesweeper" membantu kami membawa banyak kegembiraan ke dalam kelas komputer mikro.
Saat-saat bahagia. Namun di antara permainan-permainan tersebut, ada satu permainan yang sepertinya belum banyak orang yang memahami, atau bahkan mengetahui cara memainkannya. permainan ini
Itu Hati.
Baru-baru ini, setelah editor mempelajarinya dengan cermat, saya menemukan bahwa game ini memang lebih menyenangkan untuk dimainkan dibandingkan game lainnya.
Beberapa. Karena gameplay dari game ini secara sederhana dapat diringkas dalam dua kata: "curang" , dan itu adalah jenis permainan yang jelas-jelas curang.
1. Buka game: klik dua kali hongxindazhan.py dan program utama akan berjalan!
2. Memulai permainan: Ketik nama pemain, buat ID baru, dan klik Konfirmasi untuk memasuki permainan.
3. Alur permainan:
1) Ganti kartu: Pilih tiga kartu di tangan Anda dan klik tombol di atas untuk menyelesaikan pertukaran; 2) Mainkan kartu: Saat giliran pemain untuk bermain kartu, pilih kartu di tangan Anda dan klik untuk memainkannya. (Lihat lampiran untuk aturan permainan kartu tertentu) Catatan: Jika kartu ini tidak dapat dimainkan saat ini, bilah perintah di bawah akan menampilkan alasan mengapa kartu tersebut tidak dapat dimainkan.
4. Secara sistematis dibagi menjadi beberapa tahap: Setelah satu putaran permainan, tabel skor akan muncul, menunjukkan poin dan total poin setiap putaran untuk pemain dan tiga komputer, dan
Peringkat pemain saat ini. (Lihat lampiran untuk aturan khusus dalam menentukan kemenangan atau kekalahan)
5. Bilah menu:
1) Bilah Game: Game Baru (F2): Klik untuk memulai game baru. Skor (F4): Klik untuk menampilkan tabel skor. Musik latar belakang: Klik untuk mengganti tombol musik. Opsi (F5): Klik untuk mengubah kecepatan pemutaran komputer. Keluar: Klik untuk keluar dari permainan. 2) Bilah bantuan: Pengenalan peraturan (F1): Klik untuk menampilkan peraturan singkat dan ketentuan kemenangan. Kutipan: Klik untuk memunculkan kutipan terkenal.
6. Musik latar belakang: Penggantian: Anda dapat menggunakan musik format wav Anda sendiri untuk mengganti namanya menjadi 'm1.wav' untuk mengganti file dengan nama yang sama di direktori program.
1. Sebelum memainkan permainan, Anda harus memutuskan dealernya. Di komputer, bankir duduk di selatan. 2. Setelah mendapatkan satu kartu (total 13 kartu), dealer harus memilih tiga kartu terlebih dahulu dan membagikannya kepada lawan lainnya. Pada putaran pertama, kartu diberikan kepada pemain di sebelah kiri; pada putaran kedua, kartu diberikan kepada pemain di sebelah kanan; pada putaran ketiga, kartu diberikan kepada pemain yang duduk di seberangnya bulat, tidak ada kartu yang dibagikan, dan seterusnya. Setelah menerima izin dari dealer, Anda juga perlu mengembalikan tiga kartu kepada dealer sesuka hati. Di komputer, jika Anda ingin memilih kartu, cukup klik pada kartu yang sesuai. Untuk membatalkan pilihan kartu, klik lagi. 3. Pemain yang menangkap 2 klab harus memainkan 2 klab terlebih dahulu, yaitu serangan pertama. 4. Kemudian mainkan kartunya searah jarum jam. Setiap pemain pada gilirannya harus mengambil kartu dengan jenis yang sama. Jika tidak ada kartu dengan jenis yang sama dengan kartu yang dibagikan, kartu apa pun dapat dimainkan. Satu-satunya pengecualian adalah Hati atau Ratu Sekop (umumnya dikenal sebagai "Babi") tidak dapat dimainkan pada putaran pertama. Catatan: Kartu tertinggi di antara kartu-kartu dengan jenis yang sama yang dimainkan akan memenangkan babak ini, dan pemain yang memenangkan kartu tersebut akan memainkan kartu tersebut terlebih dahulu pada babak berikutnya. Hanya setelah hati telah dimainkan sebelumnya, barulah hati dapat ditarik keluar (kecuali hanya ada kartu dengan jenis yang sama di tangan, hati). 5. Di akhir setiap putaran permainan, setiap hati merah bernilai 1 poin, dan "Ratu Sekop (Babi)" bernilai 13 poin. Permainan akan berlanjut sampai seseorang mencetak 100 poin atau lebih atau dealer keluar dari permainan. Jika semua hati dan "Ratu Sekop" dimenangkan dalam satu putaran (disebut "tangkapan"), pemain "tangkap" mendapat poin nol dan pemain yang tersisa masing-masing mendapat 26 poin. Semakin rendah skornya, semakin baik untuk permainan ini.
▲ Instalasi lingkungan Lingkungan berjalan yang digunakan dalam artikel ini: Python3.7, Pycharm Community Edition 2020, modul tkinter, bagian
Modul bawaan dapat diimpor langsung tanpa instalasi. (Jika Anda perlu menginstal perangkat lunak, mengaktifkan kode, atau mengalami masalah, Anda dapat mengirimi saya pesan pribadi
Ha! ) Instalasi modul: pip install -i
https://pypi.douban.com/simple/ + nama modul
Latar belakang hijau paling orisinal. (Hanya latar belakang yang ditampilkan, gambar selebihnya tidak ditampilkan) Referensinya adalah gambar kedua di atas
Hanya kode sumber program utama yang ditampilkan. Setiap baris kode diberi komentar sehingga dapat ditampilkan langsung! Lihat seluruh kode sumber di akhir artikel!
dari impor Tkinter * dari impor tkFont * impor winound dari impor tkMessageBox * dari impor dalam * dari impor dialog * #Game pembuatan antarmuka utama classGameFrame:def__init__(self,game,bgimg):#game, objek kelas Game; bgimg, gambar latar belakang sendiri .master = game.root #Buat kanvas dan gambar latar belakang self.c = Canvas(self.master,width = 1024,height = 640) self.c.create_image(514,322,image=bgimg) self.c.pack( ) # Buat bilah status self.status = Label(self.master,text="Selamat datang di Perang Hati!", bd=1,relief=SUNKEN,anchor=W) self.status.pack(fill = X) # Buka kotak dialog awal startdialog = StartDialog(self.master,"Hearts") ifstartdialog.isCancel:game.cancel() else:self.gamemodetext = ['Lulus ke kiri', 'Lulus ke kanan', 'Lintas- ubah'] self.name = [startdialog.name,'West','Utara','East'] self.handXY = [[346.5,490,1,0],[20,135,0,1], [586.5, 20,-1,0 ],[913,375,0,-1]] self.nameXY = [[-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* [''] untuk inrange(52): self.img [i] = PhotoImage( file = '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 #Gambarkan nama untuk saya inrange(4): self.c.create_text(self.handXY[i][0 ]+self.nameXY[i ][0], self.handXY[i][1]+self.nameXY[i][1], isi = 'putih', teks = self.name[i], jangkar = diri .nameXY[i][2 ], font = Font(size=15,weight="bold")) #Buat tangan self.l = 52* [''] fori inrange(52): self.l[i] = Label(self.master, image=self.img[52],bd = -1) untuk saya dalam rentang(13): self.l[i]['teks'] = str(i) self.l[i]. bind("<Button-1 >",self.cardEvent) #Buat kartu pusat self.ml = 4* [''] untuk inrange(4): self.ml[i] = Label(self.master,image= self.img[52],bd = -1) self.b = Button(self.master,width=15,command=self.buttonEvent) #Putaran permainan dimulai self.oneGameStart() defoneGameStart(self): #Create Objek onegame untuk mendapatkan informasi kartu self.onegame = OneGame() #Dapatkan tangan pemain dan menampilkan tangan = self.onegame.getPlayerHand(0) untuk inrange(13): self.l[i]['image'] = self .img[hand[i] .id] fori inrange(4): forj inrange(13): self.moveCard(i,j,0) #Masuk ke tahap pergantian kartu saat mode permainan 0, 1, 2 jika sendiri. gamemode != 3: self.changeHands( ) else: self.onegame.changeCards([],3) self.isChanging = False self.leftCards = 13#Masuk ke fase bermain kartu, komputer di depan pemain memainkan kartu sendiri .playpreCards() defchangeHands(self): #Ubah fase kartu Inisialisasi yang sesuai self.select = []#Kartu yang dipilih self.isChanging = True self.isOK = False s = [1,3,2] self.status['text' ] = 'Silakan pilih tiga kartu untuk dibagikan' +self.name[s[self.gamemode]]+'. '#Tombol prompt menampilkan self.b['text'] = self.gamemodetext[self.gamemode] self.b.place(x = 460,y = 400) self.b['state'] = DISABLED defcardEvent(self , event): #Event kartu #Dapatkan posisi kartu i = int(event.widget['text']) ifnotself.isChanging: #Event kartu dalam tahap permainan kartu #Tidak ada kartu yang akan dimainkan sambil menunggu sendiri. iswait:return#Tidak dapat dimainkan Kartu tidak dimainkan ifnotself.onegame.available(i): self.status['text'] = self.onegame.errorString returnself.onegame.playCard(i) #Kartu yang dimainkan ditampilkan di pusat 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#Komputer di belakang pemain memainkan kartu self.iswait = True self.playlaterCards() self.status[' text'] = 'Menunggu...'self .wait += 500+ 5* self.speed #Setelah menunggu beberapa saat, kartu pusat dihapus, dan komputer di depan pemain memainkan kartunya sendiri. master.after(self.wait,self.playpreCards) self.wait = self.speed else: #Kejadian kartu dalam tahap pergantian kartu, terpental ke bawah, terjatuh terpental 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): #Event tombol prompt ifnotself.isOK: #Dapatkan kartu diganti oleh komputer sebelum mengganti kartu untuk ditukar sendiri. pilih = self.onegame.changeCards(self.select,self.gamemode) hand = self.onegame .getPlayerHand(0) untuk 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'] = ' Silakan tekan "OK" untuk menerima kartu yang diteruskan . 'self.b['text'] = 'OK' self.isOK = Benar yang lain: #Konfirmasi setelah mengganti kartu, masuk ke tahap permainan kartu, komputer di depan pemain memainkan kartu untuk diri sendiri.pilih:diri. moveCard(0,i ,0) self.b.place_forget() self.isChanging = False self.leftCards = 13self.playpreCards() defplaypreCards(self): ifself.leftCards == 0: #Setelah kartu dimainkan, skornya akan dikumpulkan dan kotak dialog skor akan ditampilkan untuk saya inrange (4): hand = self.onegame.p[i].scoreHand forj inrange(len(hand)): self.l[i*13+j][' gambar'] = self.img[tangan[j]. id] self.moveCard(i,j,0) skor = 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() # Inisialisasi setelah skor dikonfirmasi dan mulai babak baru permainan 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] untuk inrange(4): self.ml[i].place_forget() self.oneGameStart() else: # Ambil kartu komputer pemain sebelumnya dan tampilkan untuk 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): #Dapatkan kartu komputer pemain dan tampilkan lateCards = 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, negara):#i, pemain; j, kartu mana ;sebutkan, pantulkan atau letakkan # pergerakan kartu self.l[i*13+j].place_forget() x0= self.handXY[i][0] + self. handXY[i][2]*j*20y0 = self.handXY[i][1] + self.handXY[i][3]*j*20self.l[i*13+j].place(x = x0 ,y = y0- negara bagian * 20) defnewGame( self): #Permainan baru self.scorelist = [] self.gamemode = 0fori inrange(52): self.l[i].place_forget() self.l[i][ 'gambar'] = self.img[52] untuk inrange(4): self.ml[i].place_forget() self.oneGameStart() defshowScoreDialog(self): #Tampilkan dialog skor scoredialog = ScoreDialog(self.master,self .scorelist,self.name) returncoredialog defshowMiddleCard( self): #Tampilan kartu pusat 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() hand = self.onegame.getPlayerHand(p) self.ml[i]['image'] = self.img[hand[j ].id] self.ml[i] .place(x = self.middleXY[p][0], y = self.middleXY[p][1]) defence(self): #Beralih dari saat komputer selesai bermain kartu ketika pemain memainkan kartu self.iswait = Diri palsu.status['text'] = 'Silakan mainkan kartu. '#Buat jendela permainan dan buat item menu permainan classGame:def__init__(self): #Buat jendela root dan atur self.root = Tk() self.root.title("Hearts") self.root.geometry(' + 150+10') self.root.resizable(False, False) #Putar musik latar self.s = winsound.PlaySound('m1.wav', winound.SND_ASYNC+winsound.SND_LOOP) #Buat menu m = Menu(self .root) self.root['menu'] = m gamemenu = Menu(m) helpmenu = Menu(m) m.add_cascade(label = 'Game',menu = gamemenu) m.add_cascade(label = 'Help',menu = menu bantuan) gamemenu.add_command(label="Game Baru F2",command = self.gameEvent1) gamemenu.add_separator() gamemenu.add_command(label="Score... F4",command = self.gameEvent2) gamemenu.add_command( label ="Opsi... F5", command = self.gameEvent4) self.v = IntVar() self.v.set(1) gamemenu.add_checkbutton(label="Musik latar", variabel = self.v, command = self .gameEvent3) gamemenu.add_separator() gamemenu.add_command(label="Keluar",command = self.cancel) helpmenu.add_command(label="Pengantar aturan... F1",command = self.helpEvent1) helpmenu.add_command (label ="Kutipan...",command = self.helpEvent2) self.root.bind('<F2>',self.gameEvent1) self.root.bind('<F4>',self.gameEvent2) diri. root.bind('<F5>',self.gameEvent4) self.root.bind('<F1>',self.helpEvent1) self.root.protocol("WM_DELETE_WINDOW",self.cancel) #Impor gambar latar belakang bgimg = PhotoImage( file = 'bg.gif') #Buat antarmuka utama self.frame = GameFrame(self,bgimg) #Loop utama self.root.mainloop() defgameEvent1(self,event=None): #Item menu game "Baru Game" flag = askokcancel('Game Baru', 'Apakah Anda yakin ingin meninggalkan game saat ini dan memulai yang baru? ') ifflag:self.frame.newGame() defgameEvent2(self,event=None): #Item menu permainan "Skor" self.frame.showScoreDialog() defgameEvent3(mandiri): #Item menu permainan "Musik latar" ifself.v .get() == 0: winound.PlaySound(self.s,winsound.SND_PURGE) else:self.s = winound.PlaySound('m1.wav', winound.SND_ASYNC+winsound.SND_LOOP) defgameEvent4(self,event= Tidak ada): #Item menu permainan "option" optionDialog = OptionDialog(self.root,self.frame.speed / 100- 1) ifnotoptionDialog.isCancel:self.frame.speed = 100+ optionDialog.v.get() * 100defhelpEvent1( self, event=None): #Help item menu" pengenalan aturan "HelpDialog(self.root) defhelpEvent2(self): #Help item menu" pepatah terkenal "SayDialog(self.root) defcancel(self): #Matikan musik dan keluar dari permainan winound.PlaySound(self.s,winsound.SND_PURGE) self.root.destroy() defmain(): Game() if__name__== '__main__': main()
Teknologi berubah setiap harinya. Desktop "batu bata besar" telah berubah menjadi tablet portabel dalam sekejap
Baik menjadi orang baru di tempat kerja atau menjadi orang tua, mereka semua telah memulai tahapan barunya sendiri, dan permainan ini juga telah menyelesaikan misinya!
Game manakah yang menjadi favorit Anda ketika Anda masih remaja? Ngomong-ngomong, saya telah menulis tentang banyak game sebelumnya. Jika Anda memerlukan kode sumbernya, ingatlah untuk mendapatkannya dari saya!