Вы еще помните игры для Windows, в которые мы играли в те годы? Говоря об играх, поставляемых с Windows, я думаю, что многие друзья, родившиеся в 80-х и 90-х годах, с ними знакомы. В первые дни, когда игры были бесплодны, такие игры, как «Пасьянс» и «Сапер», помогали нам приносить много радости на занятиях по микрокомпьютеру.
Счастливое время. Но среди этих игр есть одна, которую, похоже, немногие люди понимают или даже умеют играть. эта игра
Это Червы.
Недавно, после того как редактор внимательно изучил ее, я обнаружил, что в эту игру действительно играть приятнее, чем в другие игры.
Некоторый. Потому что игровой процесс этой игры можно просто охарактеризовать двумя словами: «читерство» , а это игра, в которой явно присутствует мошенничество.
1. Откройте игру: дважды щелкните hongxindazhan.py, и основная программа запустится!
2. Запустите игру: введите имя игрока, создайте новый идентификатор и нажмите «Подтвердить», чтобы войти в игру.
3. Ход игры:
1) Смена карт: выберите три карты в своей руке и нажмите кнопку выше, чтобы завершить обмен. 2) Разыграйте карты: когда наступит очередь игрока разыгрывать карты, выберите карты в своей руке и нажмите, чтобы разыграть их; (Конкретные правила игры в карты см. в приложении.) Примечание. Если в данный момент эту карту невозможно разыграть, в строке подсказок ниже отобразится причина, по которой ее нельзя разыграть.
4. Систематически разбито на этапы: после раунда игры появится таблица результатов, показывающая очки и общее количество очков каждого раунда для игрока и трех компьютеров, и
Текущий рейтинг игрока. (Конкретные правила определения победы или поражения см. в приложении)
5. Строка меню:
1) Игровая панель: Новая игра (F2): нажмите, чтобы начать новую игру. Оценка (F4): нажмите, чтобы отобразить таблицу результатов. Фоновая музыка: нажмите, чтобы переключить музыкальный переключатель. Вариант (F5): нажмите, чтобы изменить скорость воспроизведения на компьютере. Выход: Нажмите, чтобы выйти из игры. 2) Панель справки: введение в правила (F1): нажмите, чтобы отобразить краткие правила и условия выигрыша. Цитата: нажмите, чтобы открыть известную цитату.
6. Фоновая музыка: Замена: Вы можете использовать свою собственную музыку в формате wav, переименовав ее в «m1.wav», чтобы заменить файл с тем же именем в каталоге программы.
1. Прежде чем начать игру, вам необходимо определиться с дилером. За компьютером банкир сидит на юге. 2. После получения карты на руки (всего 13 карт) дилер должен сначала выбрать три карты и передать их другим противникам. В первом раунде карты передаются игроку слева, во втором раунде карты передаются игроку справа, в третьем раунде карты передаются игроку, сидящему напротив; раунд, карты не передаются и так далее. После получения пропуска от дилера вам также необходимо по желанию сдать дилеру три карты обратно. На компьютере, если вы хотите выбрать карту, просто нажмите на соответствующую карту. Чтобы отменить выбор карты, нажмите еще раз. 3. Игрок, поймавший 2 треф, должен сначала сыграть 2 треф, что является первой атакой. 4. Затем разыграйте карты по часовой стрелке. Каждый игрок по очереди должен брать карты одной масти. Если нет карт той же масти, что и сданная карта, можно сыграть любую карту. Единственным исключением является то, что Черва или Пиковая дама (широко известная как «Свинья») не могут быть разыграны в первом раунде. Примечание. В этом раунде выиграет самая высокая карта среди сыгранных карт одной масти, а игрок, выигравший карту, разыграет ее первым в следующем раунде. Только после того, как ранее были разыграны червы, можно вытягивать червы (если только в руке нет карт только одной масти, червей). 5. В конце каждого раунда игры каждое красное сердце приносит 1 очко, а «Пиковая дама (Свинья)» — 13 очков. Игра будет продолжаться до тех пор, пока кто-нибудь не наберет 100 или более очков или пока дилер не выйдет из игры. Если в раунде выиграны все червы и «Пиковая дама» (так называемый «улов»), игрок «пойма» получает ноль очков, а каждый из оставшихся игроков получает по 26 очков. Чем меньше очков, тем лучше для этой игры.
▲Установка среды. Рабочая среда, используемая в этой статье: Python3.7, Pycharm Community Edition 2020, модуль tkinter, часть.
Встроенный модуль можно импортировать напрямую, без установки. (Если вам нужно установить программное обеспечение, активировать коды или столкнуться с проблемами, вы можете отправить мне личное сообщение.
ха! ) Установка модуля: pip install -i
https://pypi.douban.com/simple/ + имя модуля
Самый оригинальный зеленый фон. (Показан только фон, остальные картинки не показаны) Ориентиром является вторая картинка вверху.
Показан только основной исходный код программы. Каждая строка кода прокомментирована, поэтому ее можно показать напрямую! Полный исходный код смотрите в конце статьи!
из импорта Tkinter * из импорта tkFont * импорта winsound из импорта tkMessageBox * из внутреннего импорта * из импорта диалога * # Создание основного интерфейса игры classGameFrame:def__init__(self,game,bgimg):#game, Game class object bgimg, фоновое изображение self; .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="Добро пожаловать в 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,'Запад','Север','Восток'] 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],[411255],[466.5180],[522255]] self.img = 53* [''] fori 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 #Нарисуйте имя для inrange(4): self.c.create_text(self.handXY[i][0 ]+self.nameXY[i ][0], self.handXY[i][1]+self.nameXY[i][1], fill = 'white', text = self.name[i], привязка = self .nameXY[i][2 ], font = Font(size=15,weight="bold")) #Создаем руку self.l = 52* [''] fori inrange(52): self.l[i] = Label(self.master, image=self.img[52],bd = -1) для inrange(13): self.l[i]['text'] = str(i) self.l[i]. bind("<Button-1 >",self.cardEvent) #Создаем центральную карту 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) #Начинается раунд игры 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): #Изменить фазу карты Соответствующая инициализация self.select = []#Выбранные карты 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 , event): #Событие карты #Получить позицию карты i = int(event.widget['text']) ifnotself.isChanging: #Событие карты на этапе игры в карту #Ни одна карта не будет разыграна во время ожидания ifself. iswait:return#Невозможно разыграть Карта не разыгрывается 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'] = 'Waiting...'self .wait += 500+ 5* self.speed #После некоторого ожидания центральная карта очищается, и компьютер перед игроком разыгрывает карту self. 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: #Замените карты с помощью компьютера, прежде чем менять карты для обмена self. 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'] = ' Нажмите «ОК», чтобы принять переданную карту . 'self.b['text'] = 'OK' self.isOK = True else: #Подтвердите после смены карт, войдите в этап игры в карты, компьютер перед игроком разыгрывает карты для inself.select:self. moveCard(0,i ,0) self.b.place_forget() self.isChanging = False self.leftCards = 13self.playpreCards() defplaypreCards(self): ifself.leftCards == 0: #После того, как карты разыграны, подсчитываются очки будут агрегированы, и появится диалоговое окно результатов для i 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) Оценка = 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() # Инициализируйте после подтверждения счета и начните новый раунд игры 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: # Получите предыдущую компьютерную карту игрока и отобразите ее для 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, player; j, какая карта ;state, отскочить или положить # движение карты 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 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): #Отображение диалога оценки ОценкаDialog = ScoreDialog(self.master,self) .scorelist,self.name) возвращаетcoredialog defshowMiddleCard( self): #Центральное отображение карточек 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): #Переключение с момента окончания игры на компьютере карты, когда игрок разыгрывает карты self.iswait = False self. status['text'] = 'Пожалуйста, разыграйте карту. '#Создаем окно игры и создаем пункт игрового меню classGame:def__init__(self): #Создаем корневое окно и устанавливаем self.root = Tk() self.root.title("Hearts") self.root.geometry(' + 150+10') self.root.resizable(False, False) #Воспроизведение фоновой музыки self.s = winsound.PlaySound('m1.wav', winsound.SND_ASYNC+winsound.SND_LOOP) #Создание меню 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) = helpmenu) gamemenu.add_command(label="Новая игра F2",command = self.gameEvent1) gamemenu.add_separator() gamemenu.add_command(label="Оценка... F4",command = self.gameEvent2) gamemenu.add_command( label = "Option... F5", команда = self.gameEvent4) self.v = IntVar() self.v.set(1) gamemenu.add_checkbutton(label="Фоновая музыка", переменная = self.v, команда = self .gameEvent3) gamemenu.add_separator() gamemenu.add_command(label="Exit",command = self.cancel) helpmenu.add_command(label="Введение в правила... F1",command = self.helpEvent1) helpmenu.add_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') #Создаем основной интерфейс self.frame = GameFrame(self,bgimg) #Основной цикл 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= Нет): #Пункт меню игры "option" optionDialog = OptionDialog(self.root,self.frame.speed / 100- 1) ifnotoptionDialog.isCancel:self.frame.speed = 100+ optionDialog.v.get() * 100defhelpEvent1( self, event=None): #Пункт меню «Помощь» введение правила «HelpDialog(self.root) defhelpEvent2(self): #Пункт меню «Помощь» известная поговорка «SayDialog(self.root) defcancel(self): #Выключить музыку и выходим из игры winsound.PlaySound(self.s,winsound.SND_PURGE) self.root.destroy() defmain(): Game() if__name__== '__main__': main()
Технологии меняются с каждым днём. Настольные «большие кирпичи» в одно мгновение превратились в портативные планшеты. Люди, которые тогда тайно играли в эти встроенные игры.
Становясь новым человеком на рабочем месте или становясь родителем, все они начали свои новые этапы, и эти игры также выполнили свою миссию!
Какая игра была твоей любимой, когда ты был подростком? Кстати, я уже писал о многих играх. Если вам нужен исходный код, не забудьте получить его у меня!