Skip to content

Instantly share code, notes, and snippets.

@zelark
Created April 9, 2014 14:35
Show Gist options
  • Save zelark/10277586 to your computer and use it in GitHub Desktop.
Save zelark/10277586 to your computer and use it in GitHub Desktop.
Пишем простую RPG на Clojure (https://www.youtube.com/watch?v=r0TWL5L7RE0)
from random import randint
def kill_negative(n):
if n < 0:
n = 0
return n
def calc_attack(level):
return level*6
def calc_defence(level):
return int(level*1.4)
def calc_hitpoints(level):
return level*20
def calc_base_damage(attack, defence):
return kill_negative(attack - defence)
def roll_dice(slides):
return randint(1, slides)
def calc_sides(level):
if level > 5:
return 100
else:
return 3
def create_character(name, lvl):
character = {
'name': name,
'level': lvl,
'attack': calc_attack(lvl),
'defence': calc_defence(lvl),
'hp': calc_hitpoints(lvl)
}
return character
def real_demage(base, sides):
rd = roll_dice(sides)
s = sides // 2
if rd <= s:
return int(base / 2)
elif rd == sides:
return base * 2
else:
return base
# from(character) + to(character)
# [damage(int), character]
def take_damage(from_char, to_char):
bd = calc_base_damage(from_char['attack'], to_char['defence'])
s = calc_sides(from_char['level'])
rd = real_demage(bd, s)
to_char['hp'] -= rd
return (rd, to_char)
log_tamplate = "Character %s received %d damage.\nHis new life is %d"
def print_battle_log(damage, character):
name = character['name']
newhp = character['hp']
print(log_tamplate % (name, damage, newhp))
def print_winner(p_hp, e_hp):
if p_hp <= 0:
print("Enemy won.")
else:
print("Player won.")
def game_logic(config):
player = config['player']
enemy = config['enemy']
battle_round = 1
while(True):
if player['hp'] <= 0 or enemy['hp'] <= 0:
print_winner(player['hp'], enemy['hp'])
break
print("Round: %d" % battle_round)
pl2en = take_damage(player, enemy)
en2pl = take_damage(enemy, player)
print_battle_log(pl2en[0], pl2en[1])
print_battle_log(en2pl[0], en2pl[1])
player = en2pl[1]
enemy = pl2en[1]
battle_round += 1
player = create_character('Robert', 6)
troll = create_character('Troll', 2)
big_troll = create_character('Big Troll', 4)
config = {
'player': player,
'enemy': big_troll
}
print(player)
print(big_troll)
game_logic(config)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment