คุณยังจำเกม Windows ที่เราเล่นในช่วงหลายปีที่ผ่านมาได้หรือไม่? เมื่อพูดถึงเกมที่มาพร้อมกับ Windows ฉันเชื่อว่าเพื่อนหลายคนที่เกิดในยุค 80 และ 90 คุ้นเคยกับเกมเหล่านี้ ในสมัยแรกๆ ที่เกมยังไม่มีให้เล่น เกมอย่าง "Solitaire" และ "Minesweeper" ช่วยให้เรานำความสนุกสนานมาสู่ชั้นเรียนไมโครคอมพิวเตอร์ของเรา
เวลาแห่งความสุข แต่ในบรรดาเกมเหล่านี้ มีเกมหนึ่งที่ดูเหมือนไม่ค่อยมีคนเข้าใจหรือรู้วิธีเล่นด้วยซ้ำ เกมนี้
มันคือหัวใจ
เมื่อเร็วๆ นี้ หลังจากที่บรรณาธิการได้ศึกษามันอย่างตั้งใจ ฉันพบว่าเกมนี้น่าเล่นมากกว่าเกมอื่นๆ จริงๆ
บาง. เพราะรูปแบบการเล่นของเกมนี้สรุปได้เพียงสองคำคือ "การโกง" และเป็นเกมประเภทที่โกงอย่างเห็นได้ชัด
1. เปิดเกม: ดับเบิลคลิก hongxindazhan.py จากนั้นโปรแกรมหลักจะทำงาน!
2. เริ่มเกม: พิมพ์ชื่อผู้เล่น สร้าง ID ใหม่ และคลิกยืนยันเพื่อเข้าสู่เกม
3. กระแสเกม:
1) เปลี่ยนไพ่: เลือกไพ่สามใบในมือของคุณแล้วคลิกปุ่มด้านบนเพื่อเสร็จสิ้นการแลกเปลี่ยน 2) เล่นไพ่: เมื่อถึงตาของผู้เล่นในการเล่นไพ่ ให้เลือกไพ่ในมือของคุณแล้วคลิกเพื่อเล่น (ดูกฎการเล่นไพ่เฉพาะในภาคผนวก) หมายเหตุ: เมื่อไม่สามารถเล่นไพ่ใบนี้ได้ในขณะนี้ แถบข้อความด้านล่างจะแสดงสาเหตุที่ไม่สามารถเล่นได้
4. แบ่งออกเป็นขั้นตอนอย่างเป็นระบบ: หลังจากเล่นเกมไปหนึ่งรอบ ตารางคะแนนจะปรากฏขึ้น โดยแสดงคะแนนและคะแนนรวมของแต่ละรอบสำหรับผู้เล่นและคอมพิวเตอร์ทั้ง 3 เครื่อง และ
อันดับปัจจุบันของผู้เล่น (ดูกฎเฉพาะในการตัดสินชัยชนะหรือความพ่ายแพ้ในภาคผนวก)
5. แถบเมนู:
1) Game Bar: เกมใหม่ (F2): คลิกเพื่อเริ่มเกมใหม่ คะแนน (F4): คลิกเพื่อแสดงตารางคะแนน เพลงพื้นหลัง: คลิกเพื่อสลับสวิตช์เพลง ตัวเลือก (F5): คลิกเพื่อแก้ไขความเร็วในการเล่นของคอมพิวเตอร์ ออก: คลิกเพื่อออกจากเกม 2) แถบช่วยเหลือ: การแนะนำกฎ (F1): คลิกเพื่อแสดงกฎโดยย่อและเงื่อนไขการชนะ คำพูดอ้างอิง: คลิกเพื่อแสดงคำพูดที่มีชื่อเสียง
6. เพลงประกอบ: การแทนที่: คุณสามารถใช้เพลงในรูปแบบ wav ของคุณเองเพื่อเปลี่ยนชื่อเป็น 'm1.wav' เพื่อแทนที่ไฟล์ด้วยชื่อเดียวกันในไดเร็กทอรีโปรแกรม
1. ก่อนเล่นเกมคุณต้องตัดสินใจเลือกเจ้ามือก่อน บนคอมพิวเตอร์ นายธนาคารนั่งอยู่ทางทิศใต้ 2. หลังจากได้รับไพ่ในมือ (รวม 13 ใบ) เจ้ามือจะต้องเลือกไพ่สามใบก่อนแล้วส่งต่อให้ฝ่ายตรงข้ามอื่น ๆ ในรอบแรก ไพ่จะถูกส่งต่อไปยังผู้เล่นทางด้านซ้าย ในรอบที่สอง ไพ่จะถูกส่งต่อไปยังผู้เล่นทางขวา ในรอบที่สาม ไพ่จะถูกส่งต่อไปยังผู้เล่นที่นั่งตรงข้าม รอบไม่มีไพ่ผ่านเป็นต้น หลังจากได้รับบัตรจากเจ้ามือแล้ว คุณจะต้องส่งไพ่สามใบกลับไปให้เจ้ามือตามต้องการ บนคอมพิวเตอร์ หากคุณต้องการเลือกการ์ด เพียงคลิกที่การ์ดที่เกี่ยวข้อง หากต้องการยกเลิกการเลือกการ์ด ให้คลิกอีกครั้ง 3. ผู้เล่นที่จับไม้กอล์ฟได้ 2 ไม้จะต้องเล่นไม้กอล์ฟทั้ง 2 ไม้ก่อนซึ่งเป็นการโจมตีครั้งแรก 4. จากนั้นเล่นไพ่ตามทิศทางตามเข็มนาฬิกา ผู้เล่นแต่ละคนจะต้องจั่วไพ่ที่มีดอกเดียวกัน หากไม่มีไพ่ชุดเดียวกันกับไพ่ที่แจก ก็สามารถเล่นไพ่ใบใดก็ได้ ข้อยกเว้นเพียงอย่างเดียวคือ Heart หรือ Queen of Spades (หรือที่รู้จักกันทั่วไปในชื่อ "Pig") ไม่สามารถเล่นได้ในรอบแรก หมายเหตุ: ไพ่ที่สูงที่สุดในไพ่ชุดเดียวกันที่เล่นจะเป็นผู้ชนะในรอบนี้ และผู้เล่นที่ชนะไพ่จะเล่นไพ่ใบนั้นก่อนในรอบถัดไป หลังจากเล่นหัวใจไปแล้วเท่านั้นจึงจะสามารถดึงหัวใจออกมาได้ (เว้นแต่ว่าในมือจะมีไพ่ชุดเดียวเท่านั้นคือหัวใจ) 5. เมื่อสิ้นสุดแต่ละรอบของเกม หัวใจสีแดงแต่ละดวงจะมีค่า 1 แต้ม และ "ราชินีโพดำ (หมู)" มีค่า 13 แต้ม เกมจะดำเนินต่อไปจนกว่าจะมีคนทำคะแนนได้ 100 แต้มขึ้นไป หรือเจ้ามือออกจากเกม หากชนะใจทุกดวงและ "ราชินีโพดำ" ในรอบนั้น (เรียกว่า "จับได้") ผู้เล่นที่ "จับได้" จะได้รับคะแนนเป็นศูนย์และผู้เล่นที่เหลือแต่ละคนจะได้รับ 26 คะแนน ยิ่งคะแนนต่ำเท่าไรก็ยิ่งดีสำหรับเกมนี้
▲การติดตั้งสภาพแวดล้อม สภาพแวดล้อมการทำงานที่ใช้ในบทความนี้: Python3.7, Pycharm Community Edition 2020, โมดูล tkinter ส่วนหนึ่ง
โมดูลในตัวสามารถนำเข้าได้โดยตรงโดยไม่ต้องติดตั้ง (หากคุณต้องการติดตั้งซอฟต์แวร์ เปิดใช้งานรหัส หรือประสบปัญหา คุณสามารถส่งข้อความส่วนตัวถึงฉันได้
ฮ่า! ) การติดตั้งโมดูล: pip install -i
https://pypi.douban.com/simple/ + ชื่อโมดูล
พื้นหลังสีเขียวดั้งเดิมที่สุด (แสดงเฉพาะพื้นหลังเท่านั้นภาพที่เหลือจะไม่แสดง) การอ้างอิงคือภาพที่สองที่ด้านบน
แสดงเฉพาะซอร์สโค้ดโปรแกรมหลักเท่านั้น โค้ดแต่ละบรรทัดมีการใส่ความคิดเห็นเพื่อให้สามารถแสดงได้โดยตรง! ดูซอร์สโค้ดทั้งหมดในตอนท้ายของบทความ!
จากการนำเข้า Tkinter * จากการนำเข้า tkFont * นำเข้า winsound จากการนำเข้า tkMessageBox * จากการนำเข้าภายใน * จากการนำเข้ากล่องโต้ตอบ * #Game การสร้างอินเทอร์เฟซหลัก classGameFrame:def__init__(self,game,bgimg):#game, วัตถุคลาสเกม; .master = game.root #สร้างผืนผ้าใบและวาดพื้นหลัง self.c = Canvas(self.master,width = 1024,height = 640) self.c.create_image(514,322,image=bgimg) self.c.pack( ) # สร้างแถบสถานะ self.status = Label(self.master,text="Welcome to the Heart War!", bd=1,relief=SUNKEN,anchor=W) self.status.pack(fill = X) # เปิดกล่องโต้ตอบเริ่มต้น startdialog = StartDialog(self.master,"Hearts") ifstartdialog.isCancel:game.cancel() else:self.gamemodetext = ['ผ่านไปทางซ้าย', 'ผ่านไปทางขวา', 'ข้าม- เปลี่ยน'] self.name = [startdialog.name,'West','North','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* [''] สำหรับช่วงภายใน (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 #วาดชื่อ fori inrange(4): self.c.create_text(self.handXY[i][0) ]+self.nameXY[i ][0], self.handXY[i][1]+self.nameXY[i][1] เติม = 'สีขาว', ข้อความ = self.name[i], สมอ = ตนเอง .nameXY[i][2 ], font = Font(size=15,weight="bold")) #Create a hand 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) #Create the central card self.ml = 4* [''] สำหรับช่วง (4): self.ml[i] = Label(self.master,image= self.img[52],bd = -1) self.b = Button(self.master,width=15,command=self.buttonEvent) #รอบของเกมเริ่ม self.oneGameStart() defoneGameStart(self): #Create วัตถุ Onegame เพื่อรับข้อมูลการ์ด self.onegame = OneGame() #รับมือของผู้เล่นและแสดงมือ = 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) #เข้าสู่ขั้นตอนการเปลี่ยนการ์ดเมื่อโหมดเกมเป็น 0, 1, 2 ifself. gamemode != 3: self.changeHands( ) else: self.onegame.changeCards([],3) self.isChanging = False self.leftCards = 13# เข้าสู่ช่วงการเล่นไพ่ คอมพิวเตอร์ที่อยู่ข้างหน้าผู้เล่นจะเล่นไพ่ด้วยตนเอง .playpreCards() defchangeHands(self): #Change เฟสของการ์ด การเริ่มต้นที่สอดคล้องกัน self.select = []#Selected cards self.isChanging = True self.isOK = False s = [1,3,2] self.status['text' ] = 'โปรดเลือกไพ่สามใบที่จะผ่าน' +self.name[s[self.gamemode]]+' '#ปุ่มแจ้งเตือนจะแสดง self.b['text'] = self.gamemodetext[self.gamemode] self.b.place(x = 460,y = 400) self.b['state'] = DISABLED defcardEvent(self , กิจกรรม): #กิจกรรมของการ์ด #รับตำแหน่งของการ์ด i = int(event.widget['text']) ifnotself.isChanging: #กิจกรรมของการ์ดในด่านการเล่นไพ่ #จะไม่มีการเล่นไพ่ในขณะที่รอตัวเอง iswait:return#Cannot be play การ์ดไม่ได้เล่น ifnotself.onegame.available(i): self.status['text'] = self.onegame.errorString returnself.onegame.playCard(i) #การ์ดที่เล่นจะแสดงใน ศูนย์ 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# คอมพิวเตอร์ที่อยู่ด้านหลังผู้เล่นเล่นไพ่ self.iswait = True self.playlaterCards() self.status[' text'] = 'กำลังรอ...'self .wait += 500+ 5* self.speed #หลังจากรอเป็นระยะเวลาหนึ่ง บัตรกลางจะถูกล้าง และคอมพิวเตอร์ที่อยู่ข้างหน้าผู้เล่นจะเล่นการ์ดด้วยตนเอง master.after(self.wait,self.playpreCards) self.wait = self.speed else: #เหตุการณ์การ์ดในขั้นตอนการเปลี่ยนการ์ด เด้งลง ดรอปเด้ง ifnotself.isOK:ifi inself.select:self.select.remove( i) self.moveCard(0,i,0) self.b['state '] = ปิดการใช้งาน else:iflen(self.select) < 3: self.select.append(i) self.moveCard(0,i,1 ) iflen(self.select) == 3: self.b['state' ] = NORMAL defbuttonEvent(self): #เหตุการณ์ปุ่มพร้อมท์ ifnotself.isOK: #รับการ์ดที่เปลี่ยนโดยคอมพิวเตอร์ ก่อนที่จะเปลี่ยนการ์ดเพื่อแลกเปลี่ยนตัวเอง select = self.onegame.changeCards(self.select,self.gamemode) hand = self.onegame .getPlayerHand(0) สำหรับช่วง (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'] = ' กรุณากด "ตกลง" เพื่อยอมรับบัตรที่ส่งผ่าน . 'self.b['text'] = 'OK' self.isOK = True else: #Confirm หลังจากเปลี่ยนไพ่ เข้าสู่ขั้นตอนการเล่นไพ่ คอมพิวเตอร์ที่อยู่ข้างหน้าผู้เล่นจะเล่นไพ่ fori inself.select:self moveCard(0,i ,0) self.b.place_forget() self.isChanging = False self.leftCards = 13self.playpreCards() defplaypreCards(self): ifself.leftCards == 0: #หลังจากเล่นไพ่แล้ว คะแนน จะถูกรวมเข้าด้วยกันและกล่องโต้ตอบคะแนนจะปรากฏขึ้น fori inrange (4): hand = self.onegame.p[i].scoreHand forj inrange(len(hand)): self.l[i*13+j][' image'] = self.img[มือ[j].id] self.moveCard(i,j,0) คะแนน = self.onegame.getScore() self.scorelist.append(คะแนน) iflen(self.scorelist) != 1: fori inrange(4): self.scorelist[- 1][i] += self.scorelist[-2][i] self.status['text'] = 'Score'scoredialog = self.showScoreDialog() # เริ่มต้นหลังจากยืนยันคะแนนแล้ว และเริ่มเกมรอบใหม่ 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] สำหรับช่วง (4): self.ml[i].place_forget() self.oneGameStart() else: # รับการ์ดคอมพิวเตอร์ก่อนหน้าของผู้เล่นและแสดงไว้สำหรับ 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): #รับการ์ดคอมพิวเตอร์ของผู้เล่นแล้วแสดงในภายหลังCards = 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, state):#i, ผู้เล่น; j, การ์ดใบไหน, เด้งหรือวางการเคลื่อนไหวของการ์ด # ใบ 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- state * 20) defnewGame( self): #เกมใหม่ self.scorelist = [] self.gamemode = 0fori อยู่ในช่วง (52): self.l[i].place_forget() self.l[i][ 'image'] = self.img[52] สำหรับช่วง (4): self.ml[i].place_forget() self.oneGameStart() defshowScoreDialog(self): #Display กล่องโต้ตอบคะแนน Scoredialog = ScoreDialog(self.master,self .scorelist,self.name) returncoredialog defshowMiddleCard( self): #Central card display 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]) ปกป้อง(ตนเอง): #Switching จากเมื่อคอมพิวเตอร์เล่นเสร็จ ไพ่เมื่อผู้เล่นเล่นไพ่ self.iswait = สถานะเท็จ ['ข้อความ'] = 'กรุณาเล่นไพ่ '#สร้างหน้าต่างเกมและสร้างรายการเมนูเกม classGame:def__init__(self): #สร้างหน้าต่างรูทและตั้งค่า self.root = Tk() self.root.title("Hearts") self.root.geometry(' + 150+10') self.root.resizable(False, False) #Play เพลงพื้นหลัง self.s = winsound.PlaySound('m1.wav', winsound.SND_ASYNC+winsound.SND_LOOP) #Create 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',เมนู = helpmenu) gamemenu.add_command(label="New Game F2",command = self.gameEvent1) gamemenu.add_separator() gamemenu.add_command(label="Score... F4",command = self.gameEvent2) gamemenu.add_command( label ="Option... F5", command = self.gameEvent4) self.v = IntVar() self.v.set(1) gamemenu.add_checkbutton(label="เพลงพื้นหลัง", ตัวแปร = self.v, command = self .gameEvent3) gamemenu.add_separator() gamemenu.add_command(label="Exit",command = self.cancel) helpmenu.add_command(label="ความรู้เบื้องต้นเกี่ยวกับกฎ... F1",command = self.helpEvent1) helpmenu.add_command (ป้ายกำกับ ="Quotation...",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) #นำเข้าภาพพื้นหลัง bgimg = PhotoImage( file = 'bg.gif') #Create the main interface self.frame = GameFrame(self,bgimg) #Main loop self.root.mainloop() defgameEvent1(self,event=None): #รายการเมนูเกม "ใหม่ Game" flag = Askokcancel('เกมใหม่', 'คุณแน่ใจหรือไม่ว่าต้องการละทิ้งเกมปัจจุบันและเริ่มเกมใหม่? ') ifflag:self.frame.newGame() defgameEvent2(self,event=None): #รายการเมนูเกม "คะแนน" self.frame.showScoreDialog() defgameEvent3(self): #รายการเมนูเกม "เพลงพื้นหลัง" 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= ไม่มี): #รายการเมนูเกม "ตัวเลือก" optionDialog = OptionDialog(self.root,self.frame.speed / 100- 1) ifnotoptionDialog.isCancel:self.frame.speed = 100+ optionDialog.v.get() * 100defhelpEvent1( self, event=None): #Help รายการเมนู" แนะนำกฎ "HelpDialog(self.root) defhelpEvent2(self): #Help รายการเมนู" คำพูดที่มีชื่อเสียง "SayDialog(self.root) defcancel(self): #ปิดเพลง และออกจากเกม winsound.PlaySound(self.s,winsound.SND_PURGE) self.root.destroy() defmain(): Game() if__name__== '__main__': main()
เทคโนโลยีเปลี่ยนแปลงไปในแต่ละวัน เดสก์ท็อป "อิฐก้อนใหญ่" ได้กลายเป็นแท็บเล็ตพกพาในทันที
ไม่ว่าจะกลายเป็นคนใหม่ในที่ทำงานหรือเป็นพ่อแม่ ทุกคนต่างได้เริ่มต้นด่านใหม่ของตัวเองแล้ว และเกมเหล่านี้ก็ทำภารกิจสำเร็จเช่นกัน!
เกมไหนที่คุณชอบที่สุดเมื่อคุณยังเป็นวัยรุ่น? อีกอย่าง ฉันเคยเขียนเกี่ยวกับเกมมาหลายเกมแล้ว หากคุณต้องการซอร์สโค้ด อย่าลืมไปรับจากฉันด้วย!