Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import time
- import random
- """
- Ryhmän jäsenet
- Aleksi Lahti
- Rainer Laaksonen
- Arttu Pulkkinen
- """
- def kysy_nimi():
- """kysyy ja palauttaa pelaajan nimen max 30 merkkiä"""
- while True:
- nimi = input(" Anna nimesi: ")
- if not nimi:
- print(" Nimesi ei voi olla tyhjä!\n ")
- elif len(nimi) > 30:
- print(" Nimen maksimipituus on 30 merkkiä!\n ")
- elif nimi[0] == " " or nimi[-1] == " ":
- print(" Nimi ei voi alkaa eikä loppua välilyönnillä!\n ")
- else:
- return nimi
- def kysy_kentan_koko():
- """kysyy kentän koon x,y(suurempi kuin 10x10 pienempi kuin 100x100) ja palauttaa sen"""
- min = 10
- max = 100
- print(" Minkä kokoisella kentällä haluaisit pelata?\n ")
- while True:
- kentta = input(" Syötä kentän leveys ja korkeus muodossa x,y tai valitse pieni(1), keskikokoinen(2) tai iso(3): ")
- #tarkistus
- try:
- if kentta == "1":
- return 10, 12
- elif kentta == "2":
- return 20, 24
- elif kentta == "3":
- return 30, 36
- elif len(kentta.split(",")) == 2:
- leveys = int(kentta.split(",")[0])
- korkeus = int(kentta.split(",")[1])
- if min < leveys < max and min < korkeus < max:
- return int(leveys), int(korkeus)
- else:
- print(" Kentän korkeuden ja leveyden arvojen tulee olla välillä {}-{}\n ".format(min, max))
- else:
- print("\n Nyt tapahtui virhe!\n Leveyden arvo, sekä korkeuden arvo tulee syöttää kokonaislukuina ja luvut erottaa toisistaan pilkulla. (leveys,korkeus)\n ")
- except ValueError:
- print("\n Nyt tapahtui virhe!\n Leveyden arvo, sekä korkeuden arvo tulee syöttää kokonaislukuina ja luvut erottaa toisistaan pilkulla(leveys,korkeus)\n ")
- def kysy_miinat(kentan_leveys, kentan_korkeus):
- """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 """
- #palauttaa miinojen määrän kokonaislukuna kysymällä vaikeustason
- while True:
- vaikeustaso = input("Valitse vaikeustaso Easy(1), Medium(2) Hard(3) DeathMarch(4): ")
- try:
- if int(vaikeustaso) == 1:
- miinat = (kentan_leveys * kentan_korkeus) / 6
- return int(miinat), "Easy"
- elif int(vaikeustaso) == 2:
- miinat = (kentan_leveys * kentan_korkeus) / 4
- return int(miinat), "Medium"
- elif int(vaikeustaso) == 3:
- miinat = (kentan_leveys * kentan_korkeus) / 3
- return int(miinat), "Hard"
- elif int(vaikeustaso) == 4:
- miinat = (kentan_leveys * kentan_korkeus) / 2
- return int(miinat), "DeathMarch"
- else:
- print("Valitse vaikeustaso syöttämällä 1, 2, 3 tai 4. Muita syötteitä ei hyväksytä!")
- except ValueError:
- print("Valitse vaikeustaso syöttämällä 1, 2, 3 tai 4. Muita syötteitä ei hyväksytä!")
- def nayta_tulokset(tiedosto):
- """näyttää pelattujen pelien tulokset. tulevaisuudessa ehkä järjestääkin ne järkevästi"""
- while True:
- tulokset = input("haluatko nähdä kaikki tulokset Kyllä(y) Ei(n): ")
- if tulokset == "n":
- break
- elif tulokset == "y":
- with open(tiedosto) as tulokset:
- for rivi in tulokset.readlines():
- rivi = rivi.split(",")
- print("{} pelasi vaikeustasolla {}, {} vuoroa, kun aikaa kului {} minuuttia. Yritys päättyi {}".format(rivi[0], rivi[1], rivi[2], rivi[3], rivi[4]))
- break
- else:
- continue
- def tallenna_tulos(tiedosto, nimi, vaikeustaso, vuorot, aika, tulos):
- with open(tiedosto, "a") as tulokset:
- tulokset.write("{},{},{},{},{}.\n".format(nimi, vaikeustaso, aika, vuorot, tulos))
- def uusipeli():
- while True:
- uusipeli = input("Pelataanko uudestaan? Kyllä(y) Ei(n): ")
- if uusipeli == "y":
- return 1
- elif uusipeli == "n":
- return 0
- else:
- continue
- def sijoita_miina(kentta, jaljella):
- """Asettaa kentälle yhden miinan satunnaiseen, vapaaseen ruutuun ja palauttaa tämän ruudun koordinaatit."""
- miina = random.choice(jaljella)
- x = miina[0]
- y = miina[1]
- kentta[y][x] = "X"
- jaljella = jaljella.remove((x, y))
- return (x, y)
- #valmiit^
- def ymparoivat_miinat(kentta, alkio):
- x = alkio[0]
- y = alkio[1]
- ninjapaikat = []
- #kulmat
- #yläreuna
- #vasenreuna
- #oikeareuna
- #alareuna
- #keskellä
- if y == 0:
- if x == 0:
- try:
- ninjapaikat = [lista[y][x+1], lista[y+1][x], lista[y+1][x+1]]
- except IndexError:
- pass
- else:
- try:
- ninjapaikat = [lista[y][x-1], lista[y][x+1], lista[y+1][x-1], lista[y+1][x], lista[y+1][x+1]]
- except IndexError:
- pass
- if x == 0 and y != 0:
- ninjapaikat = [lista[y-1][x], lista[y-1][x+1], lista[y][x+1], lista[y+1][x], lista[y+1][x+1]]
- if x != 0 and y != 0:
- try:
- 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]]
- except IndexError:#kokeilee johtuuko virhe liian suuresta x arvosta
- try:
- ninjapaikat = [lista[y-1][x-1], lista[y-1][x], lista[y][x-1], lista[y+1][x-1], lista[y+1][x]]
- except IndexError:
- try:
- ninjapaikat = [lista[y-1][x-1], lista[y-1][x], lista[y-1][x+1], lista[y][x-1], lista[y][x+1]]
- except IndexError:
- ninjapaikat = [lista[y-1][x-1], lista[y-1][x], lista[y][x-1]]
- ninjat = str(ninjapaikat).count("X")
- return 1
- def muodosta_kentta(leveys, korkeus, miinat):
- """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)"""
- kentta = []
- for rivi in range(korkeus):
- kentta.append([])
- for sarake in range(leveys):
- kentta[-1].append(" ")
- jaljella = []
- for x in range(len(kentta[0])):
- for y in range(len(kentta)):
- jaljella.append((x, y))
- miinapaikat = []
- i = 0
- while i < miinat:
- miinapaikat.append(sijoita_miina(kentta, jaljella))
- i = i + 1
- #tässä vaiheessa miinat on sijoitettu kenttään ja miinapaikat tiedossa
- #sijoitetaan miinalukuarvot tyhjiin paikkoihin
- for alkio in jaljella:
- kentta[int(alkio[1])][int(alkio[0])] = ymparoivat_miinat(kentta, alkio)
- return kentta, miinapaikat
- def pelaa_peli(kentta):
- """palauttaa pelatut vuorot käytetyn ajan ja päättyikö voittoon vai tappioon"""
- vuorot = 324
- aika = 45
- tulos = "Voittoon"
- return vuorot, aika, tulos
- #MAIN
- while True:
- nimi = kysy_nimi()
- print("\n Annoit nimen {}.\n ".format(nimi))
- leveys, korkeus = kysy_kentan_koko()
- miinat, vaikeustaso = kysy_miinat(leveys, korkeus)
- kentta, miinapaikat = muodosta_kentta(leveys, korkeus, miinat)
- for vaakarivi in kentta:
- print("{}\n".format(vaakarivi))
- vuorot, aika, tulos = pelaa_peli(kentta)
- tallenna_tulos("minesweeper_tulokset.txt", nimi, vaikeustaso, vuorot, aika, tulos)
- nayta_tulokset("minesweeper_tulokset.txt")
- if uusipeli() == 0:
- break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement