Skip to content

Instantly share code, notes, and snippets.

@ilkermanap
Created January 21, 2022 09:48
Show Gist options
  • Save ilkermanap/d9b5d03653a4bf8db621b51f5075bad0 to your computer and use it in GitHub Desktop.
Save ilkermanap/d9b5d03653a4bf8db621b51f5075bad0 to your computer and use it in GitHub Desktop.
oyun. ordekleri tahtaya yerlestirir. degisik silah tanimi mumkun
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