Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.79 KB | None | 0 0
  1. import math
  2. import time
  3. import random
  4. """
  5. Ryhmän jäsenet
  6. Aleksi Lahti
  7. Rainer Laaksonen
  8. Arttu Pulkkinen
  9. """
  10. def kysy_nimi():
  11. """kysyy ja palauttaa pelaajan nimen max 30 merkkiä"""
  12. while True:
  13. nimi = input(" Anna nimesi: ")
  14. if not nimi:
  15. print(" Nimesi ei voi olla tyhjä!\n ")
  16. elif len(nimi) > 30:
  17. print(" Nimen maksimipituus on 30 merkkiä!\n ")
  18. elif nimi[0] == " " or nimi[-1] == " ":
  19. print(" Nimi ei voi alkaa eikä loppua välilyönnillä!\n ")
  20. else:
  21. return nimi
  22.  
  23. def kysy_kentan_koko():
  24. """kysyy kentän koon x,y(suurempi kuin 10x10 pienempi kuin 100x100) ja palauttaa sen"""
  25. min = 10
  26. max = 100
  27. print(" Minkä kokoisella kentällä haluaisit pelata?\n ")
  28. while True:
  29. kentta = input(" Syötä kentän leveys ja korkeus muodossa x,y tai valitse pieni(1), keskikokoinen(2) tai iso(3): ")
  30. #tarkistus
  31. try:
  32. if kentta == "1":
  33. return 10, 12
  34. elif kentta == "2":
  35. return 20, 24
  36. elif kentta == "3":
  37. return 30, 36
  38. elif len(kentta.split(",")) == 2:
  39. leveys = int(kentta.split(",")[0])
  40. korkeus = int(kentta.split(",")[1])
  41. if min < leveys < max and min < korkeus < max:
  42. return int(leveys), int(korkeus)
  43. else:
  44. print(" Kentän korkeuden ja leveyden arvojen tulee olla välillä {}-{}\n ".format(min, max))
  45. else:
  46. print("\n Nyt tapahtui virhe!\n Leveyden arvo, sekä korkeuden arvo tulee syöttää kokonaislukuina ja luvut erottaa toisistaan pilkulla. (leveys,korkeus)\n ")
  47. except ValueError:
  48. print("\n Nyt tapahtui virhe!\n Leveyden arvo, sekä korkeuden arvo tulee syöttää kokonaislukuina ja luvut erottaa toisistaan pilkulla(leveys,korkeus)\n ")
  49.  
  50.  
  51. def kysy_miinat(kentan_leveys, kentan_korkeus):
  52. """kysyy miinojen lukumäärän(int) ja palauttaa sen. miinojen pienin/suurin sallittu lukumäärä on 1, (len(korkeus)*len(leveys)) / 2 ja vaikeustaso on tietty prosentuaali kentän koosta """
  53. #palauttaa miinojen määrän kokonaislukuna kysymällä vaikeustason
  54. while True:
  55. vaikeustaso = input("Valitse vaikeustaso Easy(1), Medium(2) Hard(3) DeathMarch(4): ")
  56. try:
  57. if int(vaikeustaso) == 1:
  58. miinat = (kentan_leveys * kentan_korkeus) / 6
  59. return int(miinat), "Easy"
  60. elif int(vaikeustaso) == 2:
  61. miinat = (kentan_leveys * kentan_korkeus) / 4
  62. return int(miinat), "Medium"
  63. elif int(vaikeustaso) == 3:
  64. miinat = (kentan_leveys * kentan_korkeus) / 3
  65. return int(miinat), "Hard"
  66. elif int(vaikeustaso) == 4:
  67. miinat = (kentan_leveys * kentan_korkeus) / 2
  68. return int(miinat), "DeathMarch"
  69. else:
  70. print("Valitse vaikeustaso syöttämällä 1, 2, 3 tai 4. Muita syötteitä ei hyväksytä!")
  71. except ValueError:
  72. print("Valitse vaikeustaso syöttämällä 1, 2, 3 tai 4. Muita syötteitä ei hyväksytä!")
  73.  
  74. def nayta_tulokset(tiedosto):
  75. """näyttää pelattujen pelien tulokset. tulevaisuudessa ehkä järjestääkin ne järkevästi"""
  76. while True:
  77. tulokset = input("haluatko nähdä kaikki tulokset Kyllä(y) Ei(n): ")
  78. if tulokset == "n":
  79. break
  80. elif tulokset == "y":
  81. with open(tiedosto) as tulokset:
  82. for rivi in tulokset.readlines():
  83. rivi = rivi.split(",")
  84. print("{} pelasi vaikeustasolla {}, {} vuoroa, kun aikaa kului {} minuuttia. Yritys päättyi {}".format(rivi[0], rivi[1], rivi[2], rivi[3], rivi[4]))
  85. break
  86. else:
  87. continue
  88. def tallenna_tulos(tiedosto, nimi, vaikeustaso, vuorot, aika, tulos):
  89. with open(tiedosto, "a") as tulokset:
  90. tulokset.write("{},{},{},{},{}.\n".format(nimi, vaikeustaso, aika, vuorot, tulos))
  91.  
  92. def uusipeli():
  93. while True:
  94. uusipeli = input("Pelataanko uudestaan? Kyllä(y) Ei(n): ")
  95. if uusipeli == "y":
  96. return 1
  97. elif uusipeli == "n":
  98. return 0
  99. else:
  100. continue
  101.  
  102.  
  103. def sijoita_miina(kentta, jaljella):
  104. """Asettaa kentälle yhden miinan satunnaiseen, vapaaseen ruutuun ja palauttaa tämän ruudun koordinaatit."""
  105.  
  106. miina = random.choice(jaljella)
  107. x = miina[0]
  108. y = miina[1]
  109. kentta[y][x] = "X"
  110. jaljella = jaljella.remove((x, y))
  111. return (x, y)
  112. #valmiit^
  113. def ymparoivat_miinat(kentta, alkio):
  114.  
  115. x = alkio[0]
  116. y = alkio[1]
  117.  
  118. ninjapaikat = []
  119. #kulmat
  120. #yläreuna
  121. #vasenreuna
  122. #oikeareuna
  123. #alareuna
  124. #keskellä
  125. if y == 0:
  126. if x == 0:
  127. try:
  128. ninjapaikat = [lista[y][x+1], lista[y+1][x], lista[y+1][x+1]]
  129. except IndexError:
  130. pass
  131. else:
  132. try:
  133. ninjapaikat = [lista[y][x-1], lista[y][x+1], lista[y+1][x-1], lista[y+1][x], lista[y+1][x+1]]
  134. except IndexError:
  135. pass
  136. if x == 0 and y != 0:
  137. ninjapaikat = [lista[y-1][x], lista[y-1][x+1], lista[y][x+1], lista[y+1][x], lista[y+1][x+1]]
  138. if x != 0 and y != 0:
  139. try:
  140. ninjapaikat = [lista[y-1][x-1], lista[y-1][x], lista[y-1][x+1], lista[y][x-1], lista[y][x+1], lista[y+1][x-1], lista[y+1][x], lista[y+1][x+1]]
  141. except IndexError:#kokeilee johtuuko virhe liian suuresta x arvosta
  142. try:
  143. ninjapaikat = [lista[y-1][x-1], lista[y-1][x], lista[y][x-1], lista[y+1][x-1], lista[y+1][x]]
  144. except IndexError:
  145. try:
  146. ninjapaikat = [lista[y-1][x-1], lista[y-1][x], lista[y-1][x+1], lista[y][x-1], lista[y][x+1]]
  147. except IndexError:
  148. ninjapaikat = [lista[y-1][x-1], lista[y-1][x], lista[y][x-1]]
  149. ninjat = str(ninjapaikat).count("X")
  150.  
  151. return 1
  152.  
  153. def muodosta_kentta(leveys, korkeus, miinat):
  154. """Muodostaa kentän jossa on miinat, tyhjää paikkaa ympyröivien miinojen määrät ja palauttaa sen, sekä listan johon on tallennettu miinojen paikat tuplena(x, y)"""
  155. kentta = []
  156. for rivi in range(korkeus):
  157. kentta.append([])
  158. for sarake in range(leveys):
  159. kentta[-1].append(" ")
  160. jaljella = []
  161. for x in range(len(kentta[0])):
  162. for y in range(len(kentta)):
  163. jaljella.append((x, y))
  164.  
  165. miinapaikat = []
  166. i = 0
  167. while i < miinat:
  168. miinapaikat.append(sijoita_miina(kentta, jaljella))
  169. i = i + 1
  170. #tässä vaiheessa miinat on sijoitettu kenttään ja miinapaikat tiedossa
  171. #sijoitetaan miinalukuarvot tyhjiin paikkoihin
  172. for alkio in jaljella:
  173. kentta[int(alkio[1])][int(alkio[0])] = ymparoivat_miinat(kentta, alkio)
  174.  
  175. return kentta, miinapaikat
  176.  
  177.  
  178. def pelaa_peli(kentta):
  179. """palauttaa pelatut vuorot käytetyn ajan ja päättyikö voittoon vai tappioon"""
  180. vuorot = 324
  181. aika = 45
  182. tulos = "Voittoon"
  183. return vuorot, aika, tulos
  184.  
  185. #MAIN
  186. while True:
  187. nimi = kysy_nimi()
  188. print("\n Annoit nimen {}.\n ".format(nimi))
  189. leveys, korkeus = kysy_kentan_koko()
  190. miinat, vaikeustaso = kysy_miinat(leveys, korkeus)
  191. kentta, miinapaikat = muodosta_kentta(leveys, korkeus, miinat)
  192. for vaakarivi in kentta:
  193. print("{}\n".format(vaakarivi))
  194.  
  195. vuorot, aika, tulos = pelaa_peli(kentta)
  196.  
  197. tallenna_tulos("minesweeper_tulokset.txt", nimi, vaikeustaso, vuorot, aika, tulos)
  198. nayta_tulokset("minesweeper_tulokset.txt")
  199. if uusipeli() == 0:
  200. break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement