869 lines
27 KiB
Python
Executable file
869 lines
27 KiB
Python
Executable file
#! /usr/bin/env python
|
|
# coding=utf-8
|
|
#
|
|
#
|
|
# contents:
|
|
# 1. Imports
|
|
# 2. Globals
|
|
# 3. Classes
|
|
# 4.
|
|
|
|
|
|
|
|
# # # # # # #
|
|
# 1.Imports #
|
|
# # # # # # #
|
|
import pickle
|
|
import pygtk
|
|
import game
|
|
import os
|
|
from enemies import *
|
|
from items import *
|
|
pygtk.require("2.0")
|
|
import gtk
|
|
|
|
|
|
# # # # # # #
|
|
# 2.Globals #
|
|
# # # # # # #
|
|
|
|
|
|
|
|
|
|
# # # # # # #
|
|
# 3.Classes #
|
|
# # # # # # #
|
|
|
|
|
|
|
|
class RoomEditor(object):
|
|
""" Room Editor window class.
|
|
|
|
Window contains a List of choosable fields on the right, the modifiable fields on the left,
|
|
and can give certain fields other values, which go into Room.fielddata
|
|
or it does when its ready >.<
|
|
weird bug: Save&Quit doesnt close the window, but still returns a room object.
|
|
|
|
:todo übergebe room, nicht fields
|
|
"""
|
|
|
|
def __init__(self, fields=0):
|
|
"""
|
|
:param fields: lists of lists 30x52
|
|
"""
|
|
self.chosen = "W"
|
|
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
|
self.window.connect("delete_event", self.delete_event)
|
|
self.window.connect("destroy", self.destroy)
|
|
self.window.set_border_width(10)
|
|
|
|
self.box2 = gtk.HBox(False, 0)
|
|
self.menubox = gtk.VBox(False, 0)
|
|
|
|
if fields != 0:
|
|
self.fields = fields
|
|
# if no fields given, initialise list of lists: fields, later argument to Room()
|
|
else:
|
|
for i in range(30):
|
|
self.fields.append([])
|
|
for j in range(52):
|
|
self.fields[i].append("O")
|
|
# initialize dictionary: fielddata, later argument to Room()
|
|
self.fielddata = {}
|
|
self.show_fields()
|
|
|
|
# List which contains the buttons to choose field types
|
|
self.choose_buttons = []
|
|
self.choose_buttons.append(self.add_button(i_wall(), self.choose_field,
|
|
box=self.menubox, arg="W"))
|
|
self.choose_buttons.append(self.add_button(i_leer(), self.choose_field,
|
|
box=self.menubox, arg="O"))
|
|
self.choose_buttons.append(self.add_button(i_barricada(), self.choose_field,
|
|
box=self.menubox, arg="B"))
|
|
self.choose_buttons.append(self.add_button(i_treasure(), self.choose_field,
|
|
box=self.menubox, arg="T"))
|
|
self.choose_buttons.append(self.add_button(i_player(), self.choose_field,
|
|
box=self.menubox, arg=0))
|
|
self.choose_buttons.append(self.add_button(i_1one(), self.choose_field,
|
|
box=self.menubox, arg=1))
|
|
self.choose_buttons.append(self.add_text_button("Give Option", self.choose_field,
|
|
box=self.menubox, arg="C"))
|
|
self.choose_buttons.append(self.add_text_button("Save & Quit", self.savequit,
|
|
box=self.menubox))
|
|
|
|
self.window.add(self.box2)
|
|
self.box2.pack_end(self.menubox) # Vertical Box, for choosing Buttons
|
|
|
|
self.menubox.show()
|
|
self.box2.show()
|
|
self.window.unmaximize()
|
|
self.window.show()
|
|
|
|
def main(self):
|
|
gtk.main() # starting event processing loop
|
|
|
|
def delete_event(self, widget, event, data=None):
|
|
"""
|
|
:return False if you want to destroy window
|
|
:return True if you want to keep window
|
|
"""
|
|
print "[Gtk] delete event occured"
|
|
return False
|
|
|
|
def destroy(self, widget, data=None):
|
|
gtk.main_quit()
|
|
|
|
def add_button(self, image, function, box=0, arg=None):
|
|
self.button = gtk.Button()
|
|
# When the button is clicked it calls self.hello()
|
|
self.button.connect("clicked", function, arg)
|
|
self.button.add(image)
|
|
# pack a box to the beginning.
|
|
if box:
|
|
box.pack_start(self.button, True, True, 0)
|
|
# Close the window
|
|
# uncomment this if you want to close all parent windows without other children
|
|
# when you close a window.
|
|
# self.button1.connect_object("clicked", gtk.Widget.destroy, self.window)
|
|
self.button.show()
|
|
return self.button
|
|
|
|
def add_text_button(self, label, function, box=0, arg=None):
|
|
self.button = gtk.Button(label)
|
|
self.button.connect("clicked", function, arg)
|
|
if box:
|
|
box.pack_start(self.button, True, True, 0)
|
|
self.button.show()
|
|
return self.button
|
|
|
|
def choose_field(self, unusedbutnecessary, arg):
|
|
""" choose, which field you want to add to Room.fields
|
|
|
|
:param arg: string/integer of field type which is chosen to be added to fields.
|
|
"""
|
|
self.chosen = arg
|
|
|
|
def show_fields(self):
|
|
""" shows the current fields.
|
|
|
|
:param fields: list of lists
|
|
:return:
|
|
"""
|
|
y = len(self.fields)
|
|
x = len(self.fields[0])
|
|
self.table = gtk.Table(x, y)
|
|
self.buttonlist = []
|
|
for i in range(y):
|
|
self.buttonlist.append([])
|
|
for j in range(x):
|
|
a = (i, j)
|
|
a = self.add_button(self.which_image(self.fields[i][j]),
|
|
self.change_field, arg=a)
|
|
self.buttonlist[i].append(a)
|
|
self.table.attach(a, j, j + 1, i, i + 1)
|
|
a.show()
|
|
self.box2.pack_start(self.table)
|
|
self.table.show()
|
|
|
|
def change_field(self, unusedbutnecessary, xy):
|
|
if self.chosen == "C":
|
|
self.give_option()
|
|
return
|
|
i = xy[0]
|
|
j = xy[1]
|
|
self.fields[i][j] = self.chosen
|
|
self.buttonlist[i][j].destroy()
|
|
a = self.add_button(self.which_image(self.fields[i][j]), self.change_field, arg=xy)
|
|
self.buttonlist[i][j] = a
|
|
self.table.attach(a, j, j + 1, i, i + 1)
|
|
a.show()
|
|
self.table.show()
|
|
self.box2.show()
|
|
self.window.show()
|
|
|
|
def which_image(self, arg):
|
|
if arg == "W":
|
|
return i_wall()
|
|
elif arg == "O":
|
|
return i_leer()
|
|
elif arg == "B":
|
|
return i_barricada()
|
|
elif arg == "T":
|
|
return i_treasure()
|
|
elif arg == 0:
|
|
return i_player()
|
|
elif arg == 1:
|
|
return i_1one()
|
|
|
|
def give_option(self, unusedbutnecessary, xy):
|
|
""" Dialog to add entries to fielddata.
|
|
|
|
This is executed if the give_option is chosen and a field is clicked.
|
|
The field type is then assigned a value, e.g:
|
|
{
|
|
1 : "Police Officer", (enemy[0])
|
|
2 : 15413874260947 (Room.description)
|
|
}
|
|
for now I can't implement Doors, as there is no way to edit Rooms.
|
|
enemies: list of lists
|
|
Do I need this function? maybe I should do this with CLI.
|
|
:param unusedbutnecessary: unused
|
|
:param xy: tuple(x,y), self.fields[x][y]
|
|
:return:
|
|
"""
|
|
# dialog
|
|
# Lots of Buttons to choose from:
|
|
# for room in rooms: room.id
|
|
# for enemy in enemies: enemy[0]
|
|
# fielddata.remove(entry)
|
|
# fielddata[entry] = choice
|
|
# dialog = gtk.Dialog(title="Enter a description", parent=self.window, flags=gtk.DIALOG_DESTROY_WITH_PARENT, buttons=None)
|
|
with open("../resources/enemies", "r+") as file:
|
|
enemies = pickle.load(file)
|
|
|
|
def savequit(self, unusedbutnecessary, unusedbutnecessary2):
|
|
dialog = gtk.Dialog(title="Enter a description", parent=self.window,
|
|
flags=gtk.DIALOG_DESTROY_WITH_PARENT, buttons=None)
|
|
entry = gtk.Entry()
|
|
dialog.action_area.pack_start(entry)
|
|
entry.show()
|
|
|
|
button = gtk.Button("Ok")
|
|
button.connect("clicked", self.getext, entry)
|
|
button.connect("clicked", dialog.destroy)
|
|
dialog.action_area.pack_start(button)
|
|
button.show()
|
|
|
|
dialog.action_area.show()
|
|
dialog.show()
|
|
|
|
def getext(self, unusedbutnecessary, widget):
|
|
description = widget.get_text()
|
|
widget.destroy()
|
|
self.room = game.Room(self.fields, self.fielddata, description)
|
|
self.window.destroy()
|
|
|
|
|
|
class Choose_Field_Window(object):
|
|
""" Window for choosing one field of the mission.
|
|
|
|
weird bug: Save&Quit doesnt close the window, but still returns the coordinates.
|
|
"""
|
|
def __init__(self, room):
|
|
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
|
self.window.connect("delete_event", self.delete_event)
|
|
self.window.connect("destroy", self.destroy)
|
|
self.window.set_border_width(10)
|
|
self.box1 = gtk.HBox()
|
|
self.room = room
|
|
self.show_fields()
|
|
self.window.add(self.box1)
|
|
self.box1.show()
|
|
self.window.show()
|
|
|
|
def main(self):
|
|
gtk.main() # starting event processing loop
|
|
return self.arg
|
|
|
|
def delete_event(self, widget, event, data=None):
|
|
"""
|
|
:return False if you want to destroy window
|
|
:return True if you want to keep window
|
|
"""
|
|
print "[Gtk] delete event occured"
|
|
return False
|
|
|
|
def destroy(self, widget, data=None):
|
|
gtk.main_quit()
|
|
|
|
def show_fields(self):
|
|
""" shows the current fields.
|
|
|
|
:param fields: list of lists
|
|
:return:
|
|
"""
|
|
y = len(self.room.fields)
|
|
x = len(self.room.fields[0])
|
|
self.table = gtk.Table(x, y)
|
|
self.buttonlist = []
|
|
for i in range(y):
|
|
self.buttonlist.append([])
|
|
for j in range(x):
|
|
a = (i, j)
|
|
a = self.add_button(self.which_image(self.room.fields[i][j]), self.choose_field, arg=a)
|
|
self.buttonlist[i].append(a)
|
|
self.table.attach(a, j, j + 1, i, i + 1)
|
|
a.show()
|
|
self.box1.pack_start(self.table)
|
|
self.table.show()
|
|
|
|
def which_image(self, arg):
|
|
if arg == "W":
|
|
return i_wall()
|
|
elif arg == "O":
|
|
return i_leer()
|
|
elif arg == "B":
|
|
return i_barricada()
|
|
elif arg == "T":
|
|
return i_treasure()
|
|
elif arg == 0:
|
|
return i_player()
|
|
elif arg == 1:
|
|
return i_1one()
|
|
|
|
def add_button(self, image, function, box=0, arg=None):
|
|
self.button = gtk.Button()
|
|
self.button.add(image)
|
|
# When the button is clicked it calls self.hello()
|
|
self.button.connect("clicked", function, arg)
|
|
# pack a box to the beginning.
|
|
if box:
|
|
box.pack_start(self.button, True, True, 0)
|
|
# Close the window
|
|
# uncomment this if you want to close all parent windows without other children
|
|
# when you close a window.
|
|
# self.button1.connect_object("clicked", gtk.Widget.destroy, self.window)
|
|
self.button.show()
|
|
return self.button
|
|
|
|
def choose_field(self, unusedbutnecessary, arg):
|
|
self.arg = arg
|
|
self.window.destroy()
|
|
|
|
|
|
class CreateEnemyWin(object):
|
|
def __init__(self):
|
|
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
|
self.window.connect("delete_event", self.delete_event)
|
|
self.window.connect("destroy", self.destroy)
|
|
self.window.set_border_width(20)
|
|
global filename
|
|
filename = "../images/1one.gif" # default value
|
|
|
|
self.box1 = gtk.VBox()
|
|
self.table1()
|
|
|
|
self.button = gtk.Button("Done")
|
|
self.button.connect("clicked", self.get_values)
|
|
self.button.connect("clicked", self.destroy)
|
|
self.box1.pack_start(self.button)
|
|
self.button.show()
|
|
|
|
self.window.add(self.box1)
|
|
self.box1.show()
|
|
self.window.show()
|
|
|
|
def main(self):
|
|
gtk.main() # starting event processing loop
|
|
return self.output
|
|
|
|
def delete_event(self, widget, event, data=None):
|
|
"""
|
|
:return False if you want to destroy window
|
|
:return True if you want to keep window
|
|
"""
|
|
print "[Gtk] delete event occured"
|
|
return False
|
|
|
|
def destroy(self, widget, data=None):
|
|
gtk.main_quit()
|
|
|
|
def table1(self):
|
|
self.table = gtk.Table(2, 13)
|
|
self.tablelabel("Name:", 0)
|
|
self.tablelabel("Race:", 1)
|
|
self.tablelabel("Image:", 2)
|
|
self.tablelabel("Constitution:", 3)
|
|
self.tablelabel("Strength:", 4)
|
|
self.tablelabel("Agility:", 5)
|
|
self.tablelabel("Mobility:", 6)
|
|
self.tablelabel("Intelligence:", 7)
|
|
self.tablelabel("Gun:", 8)
|
|
self.tablelabel("Sword:", 9)
|
|
self.tablelabel("Min. Loot:", 10)
|
|
self.tablelabel("Max. Loot:", 11)
|
|
self.tablelabel("Experience", 12)
|
|
self.inputs = []
|
|
self.tableobject(gtk.Entry, 0)
|
|
self.tableobject(gtk.Entry, 1)
|
|
|
|
self.button = gtk.Button("Choose File")
|
|
self.button.connect("clicked", self.choose_file)
|
|
self.table.attach(self.button, 1, 2, 2, 3)
|
|
self.button.show()
|
|
|
|
self.tableobject(gtk.Entry, 3)
|
|
self.tableobject(gtk.Entry, 4)
|
|
self.tableobject(gtk.Entry, 5)
|
|
self.tableobject(gtk.Entry, 6)
|
|
self.tableobject(gtk.Entry, 7)
|
|
self.tableobject(gtk.Entry, 8)
|
|
self.tableobject(gtk.Entry, 9)
|
|
self.tableobject(gtk.Entry, 10)
|
|
self.tableobject(gtk.Entry, 11)
|
|
self.tableobject(gtk.Entry, 12)
|
|
|
|
self.box1.pack_start(self.table)
|
|
self.table.show()
|
|
|
|
def tablelabel(self, title, y):
|
|
a = gtk.Label(title)
|
|
self.table.attach(a, 0, 1, y, y + 1)
|
|
a.show()
|
|
|
|
def tableobject(self, Klass, y):
|
|
a = Klass()
|
|
self.inputs.append(a)
|
|
self.table.attach(a, 1, 2, y, y + 1)
|
|
a.show()
|
|
|
|
def get_values(self, unusedbutnecessary):
|
|
lst = []
|
|
end = []
|
|
for a in self.inputs:
|
|
lst.append(a.get_text())
|
|
for i in range(len(lst) + 1):
|
|
if i == 2:
|
|
end.append(self.filename)
|
|
end.append(i)
|
|
self.output = {lst[0]: lst}
|
|
|
|
def choose_file(self, unusedbutnecessary):
|
|
self.filesel = gtk.FileSelection("Select an image")
|
|
self.filesel.ok_button.connect("clicked", lambda w: self.file_ok_sel)
|
|
self.filesel.ok_button.connect("clicked", lambda w: self.filesel.destroy())
|
|
self.filesel.cancel_button.connect("clicked", lambda w: self.filesel.destroy())
|
|
self.filesel.set_filename("../images/characters/1one.gif")
|
|
self.filesel.show()
|
|
|
|
def file_ok_sel(self, w):
|
|
global filename
|
|
filename = self.filesel.get_filename()
|
|
|
|
|
|
class CreateGunWin(object):
|
|
""" Window to create guns classes.
|
|
|
|
To do: design gun logos and change the default values.
|
|
|
|
def __init__(self, name, price, image, damage, grange, ap):
|
|
super(Gun, self).__init__(name, price, image)
|
|
self.damage = damage # Integer
|
|
self.grange = grange # Integer
|
|
self.ap = ap # Integer, AP needed to fire the gun
|
|
self.type = "gun"
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
|
self.window.connect("delete_event", self.delete_event)
|
|
self.window.connect("destroy", self.destroy)
|
|
self.window.set_border_width(20)
|
|
self.filename = "../images/guns/glock.gif" # default value
|
|
|
|
self.box1 = gtk.VBox()
|
|
self.table1()
|
|
|
|
self.button = gtk.Button("Done")
|
|
self.button.connect("clicked", self.get_values)
|
|
self.button.connect("clicked", self.destroy)
|
|
self.box1.pack_start(self.button)
|
|
self.button.show()
|
|
|
|
self.window.add(self.box1)
|
|
self.box1.show()
|
|
self.window.show()
|
|
|
|
def main(self):
|
|
gtk.main() # starting event processing loop
|
|
return self.output
|
|
|
|
def delete_event(self, widget, event, data=None):
|
|
"""
|
|
:return False if you want to destroy window
|
|
:return True if you want to keep window
|
|
"""
|
|
print "[Gtk] delete event occured"
|
|
return False
|
|
|
|
def destroy(self, widget, data=None):
|
|
gtk.main_quit()
|
|
|
|
def table1(self):
|
|
self.table = gtk.Table(2, 13)
|
|
self.tablelabel("Name:", 0)
|
|
self.tablelabel("Price:", 1)
|
|
self.tablelabel("Damage:", 2)
|
|
self.tablelabel("Range:", 3)
|
|
self.tablelabel("AP:", 4)
|
|
self.tablelabel("Image:", 5)
|
|
self.inputs = []
|
|
for i in range(0, 5):
|
|
self.tableobject(gtk.Entry, i)
|
|
|
|
self.button = gtk.Button("Choose File")
|
|
self.button.connect("clicked", self.choose_file)
|
|
self.table.attach(self.button, 1, 2, 5, 6)
|
|
self.button.show()
|
|
|
|
self.box1.pack_start(self.table)
|
|
self.table.show()
|
|
|
|
def tablelabel(self, title, y):
|
|
a = gtk.Label(title)
|
|
self.table.attach(a, 0, 1, y, y + 1)
|
|
a.show()
|
|
|
|
def tableobject(self, Klass, y):
|
|
a = Klass()
|
|
self.inputs.append(a)
|
|
self.table.attach(a, 1, 2, y, y + 1)
|
|
a.show()
|
|
|
|
def get_values(self, unusedbutnecessary):
|
|
lst = []
|
|
end = []
|
|
for a in self.inputs:
|
|
lst.append(a.get_text())
|
|
for i in range(len(lst) + 1):
|
|
if i == 2:
|
|
end.append(self.filename)
|
|
end.append(i)
|
|
self.output = {lst[0]: lst}
|
|
|
|
def choose_file(self, unusedbutnecessary):
|
|
self.filesel = gtk.FileSelection("Select an image")
|
|
self.filesel.ok_button.connect("clicked", lambda w: self.file_ok_sel)
|
|
self.filesel.ok_button.connect("clicked", lambda w: self.filesel.destroy())
|
|
self.filesel.cancel_button.connect("clicked", lambda w: self.filesel.destroy())
|
|
self.filesel.set_filename("../images/guns/glock.gif")
|
|
self.filesel.show()
|
|
|
|
def file_ok_sel(self, w):
|
|
global filename
|
|
filename = self.filesel.get_filename()
|
|
|
|
|
|
# # # # # # # #
|
|
# 3.Functions #
|
|
# # # # # # # #
|
|
|
|
def i_wall():
|
|
i_wall = gtk.Image()
|
|
i_wall.set_from_file("../images/fields/wall.gif")
|
|
i_wall.show()
|
|
return i_wall
|
|
|
|
|
|
def i_leer():
|
|
i_leer = gtk.Image()
|
|
i_leer.set_from_file("../images/fields/0leer.gif")
|
|
i_leer.show()
|
|
return i_leer
|
|
|
|
|
|
def i_barricada():
|
|
i_barricada = gtk.Image()
|
|
i_barricada.set_from_file("../images/fields/barricada.gif")
|
|
i_barricada.show()
|
|
return i_barricada
|
|
|
|
|
|
def i_treasure():
|
|
i_treasure = gtk.Image()
|
|
i_treasure.set_from_file("../images/fields/treasure.gif")
|
|
i_treasure.show()
|
|
return i_treasure
|
|
|
|
|
|
def i_player():
|
|
i_player = gtk.Image()
|
|
i_player.set_from_file("../images/characters/player.gif")
|
|
i_player.show()
|
|
return i_player
|
|
|
|
|
|
def i_1one():
|
|
i_1one = gtk.Image()
|
|
i_1one.set_from_file("../images/characters/1one.gif")
|
|
i_1one.show()
|
|
return i_1one
|
|
|
|
|
|
def i_circle():
|
|
i_circle = gtk.Image()
|
|
i_circle.set_from_file("../images/kreis.gif")
|
|
i_circle.show()
|
|
return i_circle
|
|
|
|
|
|
def create_file(filename):
|
|
""" tests if file exists - if not it creates an empty dict in it.
|
|
|
|
:param filename: string - file path to create
|
|
"""
|
|
try:
|
|
with open(filename, "rb"):
|
|
return
|
|
except IOError:
|
|
print("ERROR: ", filename, " doesn't exist, is created instead.")
|
|
with open(filename, "wb") as file:
|
|
dct = {}
|
|
pickle.dump(dct, file)
|
|
|
|
|
|
def create_enemy():
|
|
""" creating enemy classes and saving them in resources/enemies """
|
|
print("Create an enemy.")
|
|
window = CreateEnemyWin()
|
|
newdict = window.main()
|
|
print("Saving enemy in resources/enemies...")
|
|
create_file("../resources/enemies")
|
|
with open("../resources/enemies", "rb") as file:
|
|
allenemies = pickle.load(file)
|
|
for i in newdict:
|
|
allenemies[i] = newdict[i]
|
|
with open("../resources/enemies", "wb") as file:
|
|
pickle.dump(allenemies, file)
|
|
print("Enemy saved.")
|
|
|
|
|
|
def create_gun():
|
|
""" creating gun classes and saving them in resources/guns """
|
|
print("Create a gun.")
|
|
window = CreateGunWin()
|
|
newdict = window.main()
|
|
print("Saving gun in resources/guns...")
|
|
create_file("../resources/guns")
|
|
with open("../resources/guns", "rb") as file:
|
|
allenemies = pickle.load(file)
|
|
for i in newdict:
|
|
allenemies[i] = newdict[i]
|
|
with open("../resources/guns", "wb") as file:
|
|
pickle.dump(allenemies, file)
|
|
print("Gun saved.")
|
|
|
|
|
|
def create_fielddata_entry(room):
|
|
""" Create a fielddata entry for a room
|
|
|
|
|
|
:param room: Room object
|
|
:return: room: Room object
|
|
"""
|
|
choice = 0
|
|
while choice == 0:
|
|
print("0 : Abort")
|
|
for entry in room.fielddata:
|
|
print(str(entry) + " : " + room.fielddata[entry])
|
|
try:
|
|
choice = int(raw_input("Which entry do you want to create? Pick a number which "
|
|
"is not given yet. delete it if you want to update an "
|
|
"existing: "))
|
|
except ValueError:
|
|
print("ERROR: Enter a number.")
|
|
if choice == 0:
|
|
return room
|
|
elif choice in room.fielddata:
|
|
print("ERROR: " + str(choice) + " is already in fielddata. Try again.")
|
|
choice = 0
|
|
else:
|
|
room.fielddata[choice] = raw_input("Enter the content of " + str(choice) + ": ")
|
|
return room
|
|
|
|
|
|
def erase_fielddata_entry(room):
|
|
"""
|
|
:param room: Room object
|
|
:return: room: Room object
|
|
"""
|
|
choice = 0
|
|
while choice == 0:
|
|
print("0 : Abort")
|
|
for entry in room.fielddata:
|
|
print(str(entry) + " : " + room.fielddata[entry])
|
|
try:
|
|
choice = int(raw_input("Which entry do you want to delete? "))
|
|
except ValueError:
|
|
print("ERROR: Enter a number.")
|
|
if choice == 0:
|
|
return room
|
|
elif choice in room.fielddata:
|
|
del room.fielddata[choice]
|
|
return room
|
|
else:
|
|
print("ERROR: " + str(choice) + " is not in fielddata. Try again.")
|
|
choice = 0
|
|
|
|
|
|
def choose_target_enemy(room):
|
|
print "0: Abort"
|
|
for i in room.fielddata:
|
|
print i + ":", room.fielddata[i]
|
|
choice = 0
|
|
while choice == 0:
|
|
try:
|
|
choice = int(raw_input("Which enemy is to be killed? "))
|
|
if choice == 0:
|
|
return
|
|
except ValueError:
|
|
print("ERROR: Enter a number.")
|
|
choice = 0
|
|
room.fielddata["target"] = choice
|
|
|
|
|
|
def create_room():
|
|
window = RoomEditor()
|
|
window.main()
|
|
choice = 0
|
|
while choice == 0:
|
|
print("(1) Create a fielddata entry")
|
|
print("(2) Erase a fielddata entry")
|
|
print("(3) Choose a target enemy")
|
|
print("(4) Finish room creation")
|
|
try:
|
|
choice = int(raw_input("What do you want to do? "))
|
|
except ValueError:
|
|
print("ERROR: Enter a number.")
|
|
if choice == 1:
|
|
create_fielddata_entry(window.room)
|
|
elif choice == 2:
|
|
erase_fielddata_entry(window.room)
|
|
elif choice == 3:
|
|
choose_target_enemy(window.room)
|
|
elif choice == 4:
|
|
print("Back to mission creation.")
|
|
return window.room
|
|
else:
|
|
print("ERROR: Enter a number between 1 and 5.")
|
|
choice = 0
|
|
|
|
|
|
def choose_room(rooms, string):
|
|
choice = "y"
|
|
while choice == "y":
|
|
for i in rooms:
|
|
print str(id(i)), i.description
|
|
try:
|
|
choice = raw_input(string)
|
|
except ValueError:
|
|
print("ERROR: Enter the ID of the room.")
|
|
for i in rooms:
|
|
try:
|
|
if id(i) == int(choice):
|
|
return i
|
|
except ValueError:
|
|
if i.description == choice:
|
|
return i
|
|
print("ERROR: ID is not in room list.")
|
|
choice = "y"
|
|
|
|
|
|
def create_mission():
|
|
""" mission creation func
|
|
|
|
rewardmoney # integer
|
|
rewarditems # list of Item-objects
|
|
rewardxp # integer
|
|
description # string
|
|
room # Room-object where to start
|
|
target_item # string (name of item) - default: None
|
|
target_enemy # integer (how many enemies have target attribute) - default: 0
|
|
target_coordinates # list (x,y,roomID) - default: None
|
|
"""
|
|
name = 0
|
|
while name == 0:
|
|
name = raw_input("What shall be the name of the mission? ")
|
|
if name in os.listdir("../missions"):
|
|
print("ERROR: Mission name already taken.")
|
|
name = 0
|
|
rooms = []
|
|
choice = "y"
|
|
while choice == "y":
|
|
print("Create a room.")
|
|
rooms.append(create_room())
|
|
try:
|
|
choice = raw_input("Do you want to create another room? (y/N) ")
|
|
except ValueError:
|
|
print("ERROR: Wrong input. Continuing mission creation.")
|
|
choice = "N"
|
|
room = choose_room(rooms, "Which room shall be the starting point? ")
|
|
print("Define success conditions:")
|
|
target_item = raw_input("Name of target item necessary to win the mission (leave "
|
|
"empty if not): ")
|
|
if target_item == "":
|
|
target_item = None
|
|
choice = raw_input("Do you want to define target coordinates? (y/N) ")
|
|
while choice == "y":
|
|
targetroom = choose_room(rooms, "Which room shall the target position be in? ")
|
|
field_choice_win = Choose_Field_Window(targetroom)
|
|
xy = field_choice_win.main()
|
|
target_coordinates = [xy[0], xy[1], targetroom]
|
|
choice = raw_input("Do you want to create another target position? (y/N) ")
|
|
else:
|
|
target_coordinates = None
|
|
target_enemy = 0
|
|
for r in rooms:
|
|
if "target" in r.fielddata:
|
|
for i in r.fields:
|
|
for j in i:
|
|
if r.fielddata["target"] == j:
|
|
target_enemy += 1
|
|
print(str(target_enemy) + " target enemies in mission.")
|
|
print("Enter additional data: ")
|
|
money = -1
|
|
while money == -1:
|
|
try:
|
|
money = int(raw_input("How much BTC shall be the reward? "))
|
|
except ValueError:
|
|
print("ERROR: Enter a number.")
|
|
money = -1
|
|
xp = -1
|
|
while xp == -1:
|
|
try:
|
|
xp = int(raw_input("How much XP shall be rewarded? "))
|
|
except ValueError:
|
|
print("ERROR: Enter a number.")
|
|
xp = -1
|
|
items = [] # Add reward items as soon as there is a modular item system.
|
|
print("Enter a mission description:")
|
|
description = raw_input()
|
|
mission = game.Mission(money, items, xp, description, room, rooms, target_item,
|
|
target_enemy, target_coordinates)
|
|
print("Mission created. Saving mission as missions/" + name + "...")
|
|
with open("../missions/" + name, mode="wb") as file:
|
|
pickle.dump(mission, file)
|
|
print("Mission saved.")
|
|
|
|
|
|
def main():
|
|
choice = 0
|
|
while choice == 0:
|
|
print("(1) Create a mission\n(2) Create a room (useless)\n(3) Create a gun")
|
|
print("(4) Create a sword\n(5) Create an enemy\n(6) Exit the editor")
|
|
try:
|
|
choice = int(raw_input("What do you want to do? "))
|
|
except ValueError:
|
|
print("ERROR: Enter a number.")
|
|
if choice == 1:
|
|
create_mission()
|
|
elif choice == 2:
|
|
create_room()
|
|
elif choice == 3:
|
|
create_gun()
|
|
elif choice == 4:
|
|
pass
|
|
# create_sword()
|
|
elif choice == 5:
|
|
create_enemy()
|
|
elif choice == 6:
|
|
print("Good Bye.")
|
|
exit()
|
|
else:
|
|
print("ERROR: Enter a number between 1 and 5.")
|
|
choice = 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|