Created
January 21, 2022 09:48
-
-
Save ilkermanap/d9b5d03653a4bf8db621b51f5075bad0 to your computer and use it in GitHub Desktop.
oyun. ordekleri tahtaya yerlestirir. degisik silah tanimi mumkun
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import uuid | |
from math import sqrt | |
import pprint | |
import random | |
class Nokta: | |
def __init__(self, x, y): | |
self.id = str(uuid.uuid4()) | |
self.x = x | |
self.y = y | |
def mesafe(self, nokta): | |
return sqrt(((nokta.x-self.x) **2) + (nokta.y-self.y)**2) | |
class Ordek(Nokta): | |
def __init__(self, guc=500, x=0, y=0): | |
Nokta.__init__(self, x, y) | |
self.guc = guc | |
self.hasar = 0 | |
def durum(self): | |
if self.hasar >= self.guc: | |
return False | |
return True | |
def report(self): | |
return { "x": self.x, "y": self.y, "guc": self.guc - self.hasar, "hasar": self.hasar, "tamguc": self.guc} | |
def atis_yap(self, silah, nokta): | |
if silah.mermi == 0: | |
return None | |
else: | |
silah.mermi -=1 | |
if silah.etki_capi > 1: | |
#genis alana etkili bomba gibi | |
uzaklik = self.mesafe(nokta) | |
if uzaklik < silah.etki_capi: | |
if (silah.etki_capi - uzaklik) < 1: | |
self.hasar += silah.guc | |
else: | |
hasar = int(silah.guc / ((silah.etki_capi - uzaklik) **2)) | |
self.hasar += hasar | |
else: | |
#nokta atisi, tufek, yumruk gibi | |
if self.mesafe(nokta) == 0: | |
#isabet etmis | |
self.hasar += silah.guc | |
class Silah: | |
def __init__(self, adi, guc, cap=1, mermi=10): | |
self.id = str(uuid.uuid4()) | |
self.adi = adi | |
self.guc = guc | |
self.etki_capi = cap | |
self.mermi = mermi | |
# hasar, patlama merkezine olan uzakligin karesiyle orantili olarak azalir. | |
def report(self): | |
return {"adi": self.adi, "guc": self.guc, "etki_capi": self.etki_capi} | |
class Oyuncu: | |
def __init__(self, adi): | |
self.id = str(uuid.uuid4()) | |
self.adi = adi | |
self.ordekler = {} | |
self.silahlar = {} | |
def ordek_ekle(self, ordek): | |
self.ordekler[ordek.id] = ordek | |
def silah_ekle(self, silah): | |
self.silahlar[silah.id] = silah | |
def atis_yap(self, silah, nokta): | |
for ordek in self.ordekler.values(): | |
ordek.atis_yap(silah, nokta) | |
def durum(self): | |
canli = False | |
for ordek in self.ordekler.values(): | |
if ordek.durum() == True: | |
canli = True | |
return canli | |
def report(self): | |
s = {} | |
for id, silah in self.silahlar.items(): | |
s[id] = silah.report() | |
o = {} | |
for id, ordek in self.ordekler.items(): | |
o[id] = ordek.report() | |
temp = { "adi": self.adi, "silah": s, "ordek": o } | |
return temp | |
class Tahta: | |
def __init__(self, x,y): | |
self.x = x | |
self.y = y | |
self.tahta = {} | |
def ekle(self, oyuncu): | |
self.tahta[oyuncu.id] = oyuncu | |
def report(self): | |
t = {} | |
for id, oyuncu in self.tahta.items(): | |
t[id] = oyuncu.report() | |
return t | |
def oyna(self): | |
durum = True | |
while durum: | |
for oyuncu in self.tahta.values(): | |
silah = random.choice(list(oyuncu.silahlar.values())) | |
x = random.randint(0, self.x) | |
y = random.randint(0, self.y) | |
print(oyuncu.adi , silah.adi , " ile " ,x ,",", y, " noktasina atis yaiyor") | |
oyuncu.atis_yap(silah, Nokta(x,y)) | |
for oyuncu in self.tahta.values(): | |
if oyuncu.durum() == False: | |
durum = False | |
print(oyuncu.adi, " kaybetti") | |
for oyuncu in self.tahta.values(): | |
print(oyuncu.adi) | |
for ordek in oyuncu.ordekler.values(): | |
print(" ", ordek.x, ordek.y, " Hasar ", ordek.hasar, " gucu ", ordek.guc) | |
print("-----") | |
def oyuncu_olustur(adi, silahlar, ordekler): | |
temp = Oyuncu(adi) | |
for silah in silahlar: | |
temp.silah_ekle(silah) | |
for ordek in ordekler: | |
puan, x,y = ordek | |
t = Ordek(puan,x,y) | |
temp.ordek_ekle(t) | |
t = None | |
return temp | |
if __name__ == "__main__": | |
tahta = Tahta(20,20) | |
o1 = Oyuncu("Siyah") | |
tabanca = Silah("tabanca", 100) | |
yumruk = Silah("yumruk", 10) | |
bomba = Silah("bomba", 220000, cap=25) | |
o1 = oyuncu_olustur("Siyah", | |
[ bomba], | |
[(800, 12, 3), | |
(950, 14, 16), | |
(1200, 13, 12)]) | |
o2 = oyuncu_olustur("Yesil", | |
[ bomba], | |
[(400, 11, 13), | |
(750, 12, 6), | |
(1100, 12, 7)]) | |
tahta.ekle(o1) | |
tahta.ekle(o2) | |
pprint.pprint(tahta.report()) | |
tahta.oyna() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment