-
Notifications
You must be signed in to change notification settings - Fork 0
/
durak.py
403 lines (348 loc) · 14.3 KB
/
durak.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
kolvo='начальное'
masti=['крести',"черви","буби","пики"]
numbers52=["2","3","4","5","6","7","8","9","10","валет","дама","король","туз"]
numbers36=["6","7","8","9","10","валет","дама","король","туз"]
numbers24=["9","10","валет","дама","король","туз"]
def skolko_kozir(kozir,cardsbot):
res=0
for k in cardsbot:
if k.split(' ')[1]==kozir:
res+=1
return res
def proverka(a,b,kozir):
if a.split(' ')[-1] in b and kozir not in a and numbers52.index(a.split(' ')[0])>numbers52.index(b.split(' ')[0]): #Обычная на обычную
return 1
elif kozir in a and kozir not in b: #Козырь на обычную
return 1
elif kozir in a and kozir in b and numbers52.index(a.split(' ')[0])>numbers52.index(b.split(' ')[0]): #Козырь козырь
return 1
else:
return 0
def prov_podkid(a,stol):
a1=a.split(' ')[0]
stol1=set()
#print(stol)
#print(a1)
for k in stol:
stol1.add(k.split(' ')[0])
if a1 in stol1:
return True
return False
def user_cards(cards,stol):
print("Ваши карты:")
for k in range(len(cards)):
n=''
if cards[k] in stol:
n='(УЖЕ НА СТОЛЕ)'
print(k+1,': ',cards[k],' ',n,sep='')
def podkid_bot(cardsbot,stol):
stol1=set()
delete=[]
for k in stol:
stol1.add(k.split(' ')[0])
for k in cardsbot:
if k.split(' ')[0] in stol1 and k not in stol:
print("Подкидываю: ",k)
stol.append(k)
delete.append(k)
for k in delete:
cardsbot.remove(k)
return cardsbot,stol
def sortirovka(cardsbot):
#Сортировка массива по индексам в намберс52
cardsbot=sorted(cardsbot, key=lambda card: numbers52.index(card.split(' ')[0]))
cardsbot=sorted(cardsbot, key=lambda card: masti.index(card.split(' ')[1]))
return cardsbot
def kozir_end(kozir,cardsbot):
k=len(cardsbot)-1
kolvo_kozir=skolko_kozir(kozir,cardsbot)
for card in range(len(cardsbot)):
if kolvo_kozir<=0:
break
if cardsbot[card].split(' ')[1]==kozir:
while cardsbot[k].split(' ')[1]==kozir and k>=0:
if cardsbot[k].split(' ')==cardsbot[card].split(' '):
break
k-=1
kolvo_kozir-=1
#print(cardsbot[k])
if cardsbot[k].split(' ')==cardsbot[card].split(' '):
break
vremennaya_fignya=cardsbot[card]
cardsbot[card]=cardsbot[k]
cardsbot[k]=vremennaya_fignya
kolvo_kozir-=1
if kolvo_kozir==0:
break
return cardsbot
def na4alo(cards,cardsbot,kozir):
minimal=9999
res=0 #0 - юзер, 1 - бот
for k in cards:
if kozir in k and numbers52.index(k.split(' ')[0])<minimal:
minimal=numbers52.index(k.split(' ')[0])
res=0
for k in cardsbot:
if kozir in k and numbers52.index(k.split(' ')[0])<minimal:
minimal=numbers52.index(k.split(' ')[0])
res=1
return res
def k52(): #52 КАРТЫ
global koloda
#print(52)
koloda=[]
for number in numbers52:
for mast in masti:
koloda.append(number+' '+mast)
koloda=set(koloda)
koloda=list(koloda)
def delete_stol(cards,cardsbot,stol):
for k in stol:
if k in cards:
cards.remove(k)
if k in cardsbot:
cardsbot.remove(k)
return cards,cardsbot
def k36():
global koloda
koloda=[]
for number in numbers36:
for mast in masti:
koloda.append(number+' '+mast)
koloda=set(koloda)
koloda=list(koloda)
def k24():
global koloda
#print(24)
koloda=[]
for number in numbers24:
for mast in masti:
koloda.append(number+' '+mast)
koloda=set(koloda)
koloda=list(koloda)
endkoloda=0
def vidacha(cards,koloda,kozir):
global endkoloda
for k in range(6-len(cards)):
if len(koloda)==0:
endkoloda=1
break
cards.append(koloda[0])
koloda.pop(0)
#print(cards)
cards=sortirovka(cards)
#print(cards)
cards=kozir_end(kozir,cards)
cards[len(cards)-skolko_kozir(kozir,cards):len(cards)]=sortirovka(cards[len(cards)-skolko_kozir(kozir,cards):len(cards)])
cards[0:len(cards)-skolko_kozir(kozir,cards)]=sortirovka(cards[0:len(cards)-skolko_kozir(kozir,cards)])
return cards,koloda
def game(koloda): #ИГРA
proverkaoshibki = 0
proverkaoshibki1 = 0
cards=[]
cardsbot=[]
kozir=koloda[-1].split(' ')[-1]
cards,koloda=vidacha(cards,koloda,kozir)
cardsbot,koloda=vidacha(cardsbot,koloda,kozir)
#Карты раздал
bito=[]
stol=[]
beginner=na4alo(cards,cardsbot,kozir)
print('КОЗЫРЬ: ',kozir)
#0 - юзер, 1 - бот
if beginner==0:
print("Вы начинаете")
while True:
cards,koloda=vidacha(cards,koloda,kozir)
cardsbot,koloda=vidacha(cardsbot,koloda,kozir)
if beginner==0: #юзер, бот отбивается
if proverkaoshibki1==0:
user_cards(cards,stol)
print("Ваш ход")
card=input()
try:
card=int(card)-1
if card>=len(cards) or card<0:
print("Ошибка. Попробуйте еще раз")
proverkaoshibki1=1
continue
except:
if card.lower()=='бито':
for biti in stol:
bito.append(biti)
cards,cardsbot=delete_stol(cards,cardsbot,stol)
stol.clear()
beginner=1
proverkaoshibki1 = 0
continue
elif card.lower()=='беру': #ЮЗЕР БЕРЕТ
cards,cardsbot=delete_stol(cards,cardsbot,stol)
cardsbot,stol=podkid_bot(cardsbot,stol)
for vzal in stol:
cards.append(vzal)
try:
cardsbot.remove(vzal)
except:
continue
stol.clear()
beginner=1
proverkaoshibki1 = 0
continue
else:
print("Ошибка. Попробуйте еще раз")
proverkaoshibki1 = 1
continue
if cards[card] in stol:
print("Карта уже на столе. Выберите другую")
continue
if prov_podkid(cards[card],stol)==False and len(list(stol))>0:
print("Невозможно положить эту карту. Выберите другую")
continue
proverkaoshibki1 = 0
stol.append(cards[card])
if len(koloda) == 0 and len(cards) == 1:
print("Вы выиграли")
break
endc=0
for k in cardsbot:
if proverka(k,cards[card],kozir)==1 and k not in stol:
print(' ')
print(k.capitalize())
print(' ')
stol.append(k)
endc=1
break
if len(koloda) == 0 and len(cardsbot) == 1 and endc==1:
print("Вы проиграли")
break
if endc==0:
user_cards(cards, stol)
print("Беру") #БОТ БЕРЕТ, ПОДКИДЫВАНИЕ
print("Если вы хотите подкинуть карты, то напишите, пожалуйста, их номера через пробел")
print('В конце ввода введите ОК')
while True:
proverkapodkida=0
podkid=input().split()
for podkidi in range(len(podkid) - 1):
try:
proverkapodkida=int(podkid[podkidi])
if proverkapodkida<1 or proverkapodkida>len(cards):
print("Некорректная карта. Попробуйте еще раз")
proverkapodkida = 999
break
except:
print("Некорректный ввод. Попробуйте еще раз")
proverkapodkida=999
break
if proverkapodkida==999:
continue
for podkidi in range(len(podkid)-1):
if prov_podkid(cards[int(podkid[podkidi])-1],stol)==True and cards[int(podkid[podkidi])-1] not in stol:
stol.append(cards[int(podkid[podkidi])-1])
else:
print("Карта",cards[int(podkid[podkidi])-1],"не может быть подкинута")
for vzal in stol:
if vzal not in cardsbot:
cardsbot.append(vzal)
#print(cardsbot)
try:
cards.remove(vzal)
except:
continue
#print(cardsbot)
#print(stol)
stol.clear()
#print(cardsbot)
#print(stol)
beginner=0
break
continue
elif beginner==1:#БОТ ХОДИТ
if proverkaoshibki==0:
print('ХОД БОТА')
pokaz=0
minimalcard=0
cardboti=0
if len(stol)==0:
## print(3)
pokaz=1
while cardsbot[cardboti].split()[-1]!=kozir:
if cardsbot[cardboti].split()[0]<cardsbot[minimalcard].split()[0]:
minimalcard=cardboti
cardboti+=1
if cardboti>=len(cardsbot):
break
else:
for cardboti in range(len(cardsbot)):
if prov_podkid(cardsbot[cardboti],stol)==True and cardsbot[cardboti] not in stol:
minimalcard=cardboti
pokaz=1
break
if pokaz==0:
print("Бито")
for biti in stol:
bito.append(biti)
cards,cardsbot=delete_stol(cards,cardsbot,stol)
stol.clear()
beginner=0
continue
user_cards(cards,stol)
print('')
print(cardsbot[minimalcard])
stol.append(cardsbot[minimalcard])
if len(koloda) == 0 and len(cardsbot) == 1:
print("Вы проиграли")
break
#В стол занесено
## print('КАРТЫ БОТА: ',cardsbot)
card=input()
try:
card=int(card)-1
if card>=len(cards) or card<0:
print("Ошибка. Попробуйте еще раз")
proverkaoshibki = 1
continue
except:
if card.lower()=='беру': #ЮЗЕР БЕРЕТ
cards,cardsbot=delete_stol(cards,cardsbot,stol)
cardsbot,stol=podkid_bot(cardsbot,stol)
for vzal in stol:
cards.append(vzal)
try:
cardsbot.remove(vzal)
except:
continue
stol.clear()
beginner=1
#print(1)
proverkaoshibki = 0
continue
else:
print("Ошибка. Попробуйте еще раз")
proverkaoshibki = 1
continue
if cards[card] in stol:
print("Карта уже на столе. Выберите другую")
proverkaoshibki=1
continue
if proverka(cards[card],cardsbot[minimalcard],kozir)==False:
print("Невозможно положить эту карту. Выберите другую")
proverkaoshibki = 1
continue
stol.append(cards[card])
if len(koloda) == 0 and len(cards) == 1:
print("Вы выиграли")
break
proverkaoshibki = 0
while kolvo not in ['1','2','3']:
kolvo=input("Выберите количество карт:\n1. 52\n2. 36\n3. 24\n")
if kolvo=='1':
k52()
elif kolvo=='2':
k36()
elif kolvo=='3':
k24()
else:
print("Ошибка. Попробуйте еще раз")
continue
game(koloda)