From d30612dfc72ad4aa78521bdf167c18bf844fa9f8 Mon Sep 17 00:00:00 2001 From: Andrzej Date: Sun, 30 May 2021 00:25:54 +0200 Subject: [PATCH] Decision Tree --- bin/Classess/DecisionTree.py | 45 ++ bin/Classess/Field.py | 14 +- bin/Classess/Mine.py | 10 +- .../__pycache__/DecisionTree.cpython-37.pyc | Bin 0 -> 1342 bytes bin/Classess/__pycache__/Field.cpython-37.pyc | Bin 3606 -> 3818 bytes bin/Classess/__pycache__/Mine.cpython-37.pyc | Bin 485 -> 616 bytes bin/Main/LearnDecisionTree.py | 9 + bin/Main/__pycache__/__init__.cpython-37.pyc | Bin 125 -> 143 bytes bin/Main/__pycache__/main.cpython-37.pyc | Bin 4325 -> 11384 bytes bin/Main/test.py | 15 + bin/main/main.py | 231 ++++--- files/decision tree/classifier.joblib | Bin 0 -> 3723 bytes files/decision tree/database.csv | 641 ++++++++++++++++++ files/flag/FlagBlue.png | Bin 0 -> 395 bytes files/flag/FlagGreen.png | Bin 0 -> 397 bytes files/flag/FlagRed.png | Bin 0 -> 388 bytes files/flag/FlagYellow.png | Bin 0 -> 439 bytes files/flag/Flaga.png | Bin 372 -> 0 bytes resources/Globals.py | 5 +- resources/__pycache__/Globals.cpython-37.pyc | Bin 854 -> 874 bytes 20 files changed, 875 insertions(+), 95 deletions(-) create mode 100644 bin/Classess/DecisionTree.py create mode 100644 bin/Classess/__pycache__/DecisionTree.cpython-37.pyc create mode 100644 bin/Main/LearnDecisionTree.py create mode 100644 bin/Main/test.py create mode 100644 files/decision tree/classifier.joblib create mode 100644 files/decision tree/database.csv create mode 100644 files/flag/FlagBlue.png create mode 100644 files/flag/FlagGreen.png create mode 100644 files/flag/FlagRed.png create mode 100644 files/flag/FlagYellow.png delete mode 100644 files/flag/Flaga.png diff --git a/bin/Classess/DecisionTree.py b/bin/Classess/DecisionTree.py new file mode 100644 index 0000000..8fc0a05 --- /dev/null +++ b/bin/Classess/DecisionTree.py @@ -0,0 +1,45 @@ +import pandas as pd +from sklearn.model_selection import train_test_split +from sklearn.tree import DecisionTreeClassifier +from sklearn.metrics import classification_report, confusion_matrix +from joblib import dump, load + + +class DecisionTree: + def __init__(self): + self.classifier = load('../../files/decision tree/classifier.joblib') + + +def Learning(): + # Uploading data from file + dataset = pd.read_csv("../../files/decision tree/database.csv") + + print(f'Shape: {dataset.shape}') + print(f'Head:\n{dataset.head()}') + + X = dataset.drop('decision', axis=1) + y = dataset['decision'] + + # Split data to training and test sets + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.10) + + # Training + classifier = DecisionTreeClassifier() + classifier.fit(X_train, y_train) + + # Predictions test + y_pred = classifier.predict(X_test) + # print(y_pred) + + # my_dict = {'known': [1], 'power': [1], 'new': [1], 'location': [0], 'stable': [1], 'chain_reaction': [1]} + # s = pd.DataFrame.from_dict(my_dict) + # predict = self.classifier.predict(s) + # + # print(predict) + + print() + print(confusion_matrix(y_test, y_pred)) + print(classification_report(y_test, y_pred)) + + dump(classifier, '../../files/decision tree/classifier.joblib') + diff --git a/bin/Classess/Field.py b/bin/Classess/Field.py index 2df8c04..fc1c748 100644 --- a/bin/Classess/Field.py +++ b/bin/Classess/Field.py @@ -24,12 +24,16 @@ class Field(object): self.columns = 10 self.x_start = 5 self.y_start = 5 - self.state_of_cell_array = [[0 for i in range(3)] for j in range(200)] + # For red and green rectangles + # self.state_of_cell_array = [[0 for i in range(3)] for j in range(200)] + # Is on this position mine (True, False) self.field_state_array = [[False for i in range(self.rows)] for j in range(self.columns)] self.small_image_array = [[0 for i in range(self.rows)] for j in range(self.columns)] self.large_image_array = [[0 for i in range(self.rows)] for j in range(self.columns)] self.cell_expense = [0 for i in range(self.rows * self.columns)] - self.visited_mines = [] + # Array rows * columns, if on [x][y] mine, object mine will be in the array in this position + self.state_of_cell_array = [["None" for _ in range(self.rows)] for __ in range(self.columns)] + # self.visited_mines = [] # Modified by Artem to search in the status area self.canvas_small_images = [] @@ -47,7 +51,11 @@ class Field(object): bg='gray') self.large_image_canvas.place(x=FRAME_WIDTH + 5, y=3) - self.flag_img = PhotoImage(master=self.small_field_canvas, file="../../files/flag/Flaga.png") + self.flag_img = PhotoImage(master=self.small_field_canvas, file="../../files/flag/FlagRed.png") + self.flag_green_img = PhotoImage(master=self.small_field_canvas, file="../../files/flag/FlagGreen.png") + self.flag_yellow_img = PhotoImage(master=self.small_field_canvas, file="../../files/flag/FlagYellow.png") + self.flag_red_img = PhotoImage(master=self.small_field_canvas, file="../../files/flag/FlagRed.png") + self.flag_bleu_img = PhotoImage(master=self.small_field_canvas, file="../../files/flag/FlagBlue.png") # Clear Canvases def Moving(self): diff --git a/bin/Classess/Mine.py b/bin/Classess/Mine.py index c3b8bcd..2008b0c 100644 --- a/bin/Classess/Mine.py +++ b/bin/Classess/Mine.py @@ -1,7 +1,15 @@ class Mine: - def __init__(self, x, y): + def __init__(self, x, y, known, power, new, location, stable): self.array_x = x self.array_y = y self.status = True self.small_img = None self.large_img = None + + # Attributes for decision tree + self.known = known # 0 - 'no', 1 - 'yes' + self.power = power # 0 - 'no', 1 - 'yes' + self.new = new # 0 - 'no', 1 - 'yes' + self.location = location # 0 - 'standard', 1 - 'sand', 2 - 'water', 3 - 'swamp' + self.stable = stable # 0 - 'no', 1 - 'yes' + self.chain_reaction = 0 # 0 - 'no', 1 - 'yes' diff --git a/bin/Classess/__pycache__/DecisionTree.cpython-37.pyc b/bin/Classess/__pycache__/DecisionTree.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53af20384db664d86727cd814f4833ff4e613c10 GIT binary patch literal 1342 zcmb7DPmdEf6t_KpGn<5{6c9*Ad#V&w%HCIqt_oGDgjPs!KvpEzJ9bzvGn2vgRwSC7 z!j%uuR!F;2FI*89z62k@S5ABdPCQR`Xh7TZGUD zFLWya<^Z;#Km-!FKorB56r>DjfW0m#!ZM;!%ZEi=CNwEinznLO^vaB8qhy!nw|O^tmIa!=WsL>r)BNJV$MbGopp-5;0YZIYxh)9t_~^}?l$sY+SKdOm0$J;KW?U!Ces90G7SUhz^g<}$|0xi~F6 z-)HREDK9n_J%Bgb@U}?b>rx%&+!UbB1nTyg1^x# zvc}lUL4(f1bJS_T8i`OuB7R9$kZ=)RM=N6E1~)_`B7GT5!&R^fSJ5iA$r`PaCOJ!+ zpoz{2M!@%)5Im)ptf7jQ*sO`0bbaB??rcf@CK0_g+-ggj9WHbx^Ga}|FM~+0nWu$+VgfBF3kD+r69CiQ;-US{>gTFOM=y1%Qo{J> vW`oV6r156jTA=N~wSC#T-HO|foAzDo(p#IpzwN7Lyeh?g_>J%=7)GA~iBw!t literal 0 HcmV?d00001 diff --git a/bin/Classess/__pycache__/Field.cpython-37.pyc b/bin/Classess/__pycache__/Field.cpython-37.pyc index 50d164bb3e3f541dd628074abb47522a20dead2d..86817653164a52b4cb79aba8a3bc320be4472125 100644 GIT binary patch delta 1169 zcmZuv-%ry}6z=W1?q|31V;d{m_^~NWbR-6d5g|wfVhlW}i4jT4K|Lf?;W1)nw7t1?-E3hY2qJC|^*A@Y(8l;b!~G(_I4$K_ov z?{#_7<$eF@`(3WN`79Q02>EU{CZ1;RrCVs0y%CpChK)<(3ENAH)iSXqT3fH@MGEiM zMithO66~cMV%we^JCqJs)E8ni(pZc}xxm#?6=Fo&*e^NF-pUGlC+(tM-gj!SrH;#K z03ZyYaOh=+@-phM z7JQRisX}3x|4W8R>cb_oSRS6`aGl`7{c4%}id!GOtZG` z2+}771#UKNt`WyAXNx!Q*`9TyN}CgcchFcZmWf_BHVKWg&%PW}{j)K1jB z8&$*7^>)tc7dZ&XkL2T*q#+H-8cKb<%vA^ke-^E2)T;ihr>ctSv~z;*T-(O~S-9sc*&>{7|F? z3mUXMaN$a~DsJ5A%AGC+SF=)FMR28pAc*%RsZ!8P=H$*j_niCg&3w*1$cB&Vx{BbV z{(5@pr?wV;kEhl?jTl5G$_ny=q+=N$L(6y-St>h;(@UY-sEA1r*nk&YMP=m=uQeI< zAB;{yEjOr_xyAs;wrjYAz&p~!DA6E}HRHI~=^0+a>mnM_>k{OXpiC~6Q(l^c>lh<1 z!xQb22#MCg+UkZ}_oLKf)aJ35C9xDDakx9d%4pZ+pe|SL@e)KzB9b6obpaH;TuqWB zRTsdkkDzH}rl*`C0inh&SW-h}%R<_mhS2Q+D4`qZV%JSf5W%o5M1|ni$%)SX1a5p<8?oCk%bSCy?TBw$6Q=okNJ}$F&iUB3B#JtpagAn^7Ie46%m$%?7 zyCokU^d(wbbldeb(lU`;yHcbV;IR-3kr#(C{VRc>9y zUWyvKEAL7EN5`Iu8TM5^!>&sqHq((;I=Pv_?sOcS$mH|G@GUwO+Z`@e3Z>z3fI@!0 zT7nb65|J-)((Lzz)0cg5(W%mwoKvbZS18$*>s+&Gj4cE}H$0E7cr*>D*+)4Z}+5rGjDA&$dX!>XWS z1H&z_v+7usi+zRI72C6U5B6Nm;E@+^)k(aR;GEn%asxwbM(HN_p#vPk9Qrx%Ez+$V z`1?cmb1(sXr7%BlSBbC9QoG>UR?~^@lAI|_K$0tkA(%mv*)QZJP#1$H_rz@m3Ab3Y^YY8{Zm|~Rm!}rp zV$Mq~zr~T0pPX2dnV)xyt+*sHDJS(7UvfrbW?pBEm_d`tFGQ1d z;(Y@lP3BuH#i==Iw-_sKF;=c*DB_x&&*;MnHf{15Mh8(IpvEE)7m47WtjMIOhAs$H VbBn_!H$SB`C)JJ-$omY$3;+z`9-jaJ diff --git a/bin/Main/LearnDecisionTree.py b/bin/Main/LearnDecisionTree.py new file mode 100644 index 0000000..2606a7d --- /dev/null +++ b/bin/Main/LearnDecisionTree.py @@ -0,0 +1,9 @@ +from bin.Classess.DecisionTree import Learning + + +def LearnDecisionTree(): + Learning() + + +if __name__ == '__main__': + LearnDecisionTree() diff --git a/bin/Main/__pycache__/__init__.cpython-37.pyc b/bin/Main/__pycache__/__init__.cpython-37.pyc index c31a95094007623bb037c0d606d2b5ecb9316f60..7b5db1377e75a79b9a34c901295ae7d4c6da1d93 100644 GIT binary patch delta 51 zcmb>JXXJL`<>g`k0FL`so7zYxEE( delta 33 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 NZoxg~X57V``G3!~C3OG* literal 4325 zcma)9&u?2v9iN%^!_SUmCu!OwyJdIj!U`iucMIw+ODVKX+J^`+3;UP!sB%g)Uy2AuF!u{OGgZRhd|$O}$dLq50;Fs^Z3L}Sm+!3>6(qm_Y2jEVao4%BANqr*G(wu+*x6h-Z> zJV>Ztj-vg8dXmrRGLf8}rc2UkBCd&#Q}|LBAmD*xF;lu9^Gr+3h~v!LCd*AQJ0_Y1 zHK;6B}C&g zje$KGOAi)76<5x9d%HOxR=6ZvBD&dLp~>PF>@GqJf9mhydR{6uA^a2_VR+fhS-VoqyrxJ9dm z!SRXG1)}7pM(t(uYr6h8?lf=JbyIDSc(owohZ*m|*Sn81KW8=LamHKW+$5*u)1gqw zgxlE|aj(Zo@-~i0zXia!&wb%?*O}vUydna=DCT$>eV>z$m(f4R&k6k#o!f$^CI#zuLV0xZh}5C9Ql~dDbC1#nu5xzuU5=0GoO&SlN!%; zQf(Y)tvV*xT-3{6LL6oblRGC2qu-)4z7A01VP&+aX;Z>W3ew-is;l@?l92HQ=)~g2 z(i57Z(n|jUIwXBd7^mgp^M+fMSm2n*) ztW2LEdMM)}ZiW7vA=!A#Sz^ZBW%`$fyU0C+c^?HM62@!!&kIt#;GCf!jQg~%NVx&4 zil#)7Yi0;`KE>|xkmf9C{uTX-;s2eMbTM1BCs&6Qt9E3m*b~Z=Cp_bw-&zU0UGa?T zXP|F6hCOi7t_R#ZCvtr7f5~B2P0O(ZYL){_cMf!gzHh*5%OT8H$m37SV<}I_W5-kS zbpCFoDOhR#{mN5G+m@H%?ys^6bT~Y7$}0AZ0B4XCQx?iGqZ5Yu{vRjURn_sp$$Y62Wt4uG7M>?SiOc%BrbLyM^L;nhH*Va#uV16dRRXUA&?QSf zLV}ryBO5~g?d~IF;g7KkhXkRd5gmU+cy$~k098u=Jg?ku6dIJIKY&Y!HH_0ucL zd|_gT{xQyJ*c$;lly5wIHa>raj)c7j0+nAI_MG?G3#$Bb;P%~t*Jqz2)Aqg3+3y`x zd)#^v$5)NbP^k0nQ!yxXDt7FR#{EK{)9s+|T%wBZQAJ1VW9K3&yMucG;l%#pR-U_t z_4iAD{>kap)$`kNqSEuD%!)#l)nLM7b7|I^`k0av-8{Q#R!HL1$XJJ^J3C#| zwdE~0rL`Vqy;^|Vcub|St9zMeE2gHprE3JP0E{ZEt#`v}yH__mwxYaj$XRI1D$nkUBh3(LaiYQaH^IOXp}I}>>al65B2Bf^)C+qssc4Nw^%^b{ zYbuSKow|v;o!?^ECy|4s`3U&kIS7&>YahUCWy=dS|N66%zRf`k5zP@UE4y4CNsd%YvDGK{G_9@`9dqbX^TL z^*i7p^zYf%QRp_|fVhl^hs`I;h@V%6(Dcm2?Jj-dUHVA%F4wAAu(h$d_VHHq$+-7( ztHjK~#WC|tY!Vd~8{N)!+&s`K44SIjRz~-%bL;PdDNT=$lSCQ1c)Cfe%rKzGThi_B z)toQ@!H6!hVKtBQab$+ooVPLJWvjVF=8rgK7;Y6@EGxY1xJZKd9AEedJ533eUTU;D zifSui!R*EzWDrd;7oGxNtJjixnyNHi%^${^%p5LE&DaN(rcl)%5x7O*hXj5E5SBJ> zU%9a!-P;J)^N6G8fPKtm+}Ougt_!*d=9R;`C&fwbqvU3mS6!jriHF*rtr)?j{Ec~; qN?S@51{no;rA&8i`a7<`&D*I2t`m5{n?V40F<1zSK`B@X_ goal_all[i].priority: - # elem_min = goal_all[i] - # index = fringe.index(elem_min) - # fringe = fringe[:index + 1] - # - # create_action_list(states, -1) - # - # # for i in range(0, len(fringe)): - # # print('Node{} = State: {} {}, Parent: {} {} {}, Action: {}'.format(i + 1, fringe[i].state.coord, fringe[i].state.direction, fringe[i].parent[0], fringe[i].parent[1], fringe[i].parent[2], fringe[i].action)) - # - # print(action_list) - # - # - # - # # Start moving - # AutoMove() +# Check in which locations is mine +def CheckLocation(x, y): + # Add x + y like strings that create xy number + temp_x = str(x) + temp_y = str(y) + position_str = temp_x + temp_y + position = int(position_str) + + color_number = -1 + if field.cell_expense[position] == standard_cell_cost: + color_number = 0 + elif field.cell_expense[position] == sand_cell_cost: + color_number = 1 + elif field.cell_expense[position] == water_cell_cost: + color_number = 2 + elif field.cell_expense[position] == swamp_cell_cost: + color_number = 3 + + return color_number +# Add mines on the field and to arrays def PutMines(mines_array): counter = 0 @@ -339,9 +338,18 @@ def PutMines(mines_array): if x == 0 and y == 0: continue else: - mine = Mine(x, y) + known = random.randint(0, 1) + power = random.randint(1, 10) + new = random.randint(0, 1) + location = CheckLocation(x, y) + stable = random.randint(0, 1) + + mine = Mine(x, y, known, power, new, location, stable) mines_array.append(mine) + # Add mine to array at the right position + field.state_of_cell_array[x][y] = mine + field.field_state_array[x][y] = True counter += 1 @@ -391,8 +399,8 @@ def MinesInArrays(mines_array, directory, imgs_array, bool_mines_coord): field.mines_coord.append([mines_array[i].array_x, mines_array[i].array_y]) -def DrawFlag(): - field.small_field_canvas.create_image(player.current_x, player.current_y, anchor=NW, image=field.flag_img) +def DrawFlag(image): + field.small_field_canvas.create_image(player.current_x, player.current_y, anchor=NW, image=image) # def IsItMine(): @@ -439,15 +447,14 @@ def DrawRectangle(): elif field.cell_expense[i] == swamp_cell_cost: color = "green4" if color != "None": - field.small_field_canvas.create_rectangle(x, y, x + IMAGE_SIZE + 2, y + IMAGE_SIZE + 2, width=2, outline=color) + field.small_field_canvas.create_rectangle(x, y, x + IMAGE_SIZE + 2, y + IMAGE_SIZE + 2, width=2, + outline=color) x += player.step if x + IMAGE_SIZE + 2 > field.width: x = 4 y += player.step - - def AddCostCellsToArray(amount, cost): counter = 0 while counter < amount: @@ -461,7 +468,9 @@ def CostingOfCells(): AddCostCellsToArray(amount_of_sand_cells, sand_cell_cost) AddCostCellsToArray(amount_of_water_cells, water_cell_cost) AddCostCellsToArray(amount_of_swamp_cells, swamp_cell_cost) - AddCostCellsToArray(field.rows * field.columns - (amount_of_sand_cells + amount_of_water_cells + amount_of_swamp_cells), standard_cell_cost) + AddCostCellsToArray( + field.rows * field.columns - (amount_of_sand_cells + amount_of_water_cells + amount_of_swamp_cells), + standard_cell_cost) # Draw rectangles DrawRectangle() @@ -469,8 +478,9 @@ def CostingOfCells(): def click_button(): btn.destroy() - label = Label(field.win, text="Wait...\nAI conquers the world...", fg='black', font="20") - label.place(x=50, y=570) + global label + label = Label(field.win, text="Wait...\nAI conquers the world...", fg='black', font="20", bg='gray') + label.place(x=10, y=560) field.win.update() track = tr.genetic_algorithm(travel.points_map) @@ -480,6 +490,41 @@ def click_button(): MouseClickEvent(track) +# Check if there mines near and if, mark it +def CheckForMinesNear(x, y): + if x > 0: + if field.state_of_cell_array[x - 1][y] != "None": + # Mark by chain reaction current mine + field.state_of_cell_array[x][y].chain_reaction = 1 + # Mark by chain reaction mine that near + field.state_of_cell_array[x - 1][y].chain_reaction = 1 + if x < 9: + if field.state_of_cell_array[x + 1][y] != "None": + # Mark by chain reaction current mine + field.state_of_cell_array[x][y].chain_reaction = 1 + # Mark by chain reaction mine that near + field.state_of_cell_array[x + 1][y].chain_reaction = 1 + if y > 0: + if field.state_of_cell_array[x][y - 1] != "None": + # Mark by chain reaction current mine + field.state_of_cell_array[x][y].chain_reaction = 1 + # Mark by chain reaction mine that near + field.state_of_cell_array[x][y - 1].chain_reaction = 1 + if y < 9: + if field.state_of_cell_array[x][y + 1] != "None": + # Mark by chain reaction current mine + field.state_of_cell_array[x][y].chain_reaction = 1 + # Mark by chain reaction mine that near + field.state_of_cell_array[x][y + 1].chain_reaction = 1 + + +def CheckForChainReaction(): + for x in range(field.columns): + for y in range(field.rows): + if field.state_of_cell_array[x][y] != "None": + CheckForMinesNear(x, y) + + def main(): # Creating the main window of an application win_size = f'{WINDOW_X}x{WINDOW_Y}' @@ -487,6 +532,7 @@ def main(): field.win.configure(bg='gray') field.win.geometry(win_size) print(f'Amount of mines: {AMOUNT_OF_MINES}') + global btn btn = Button(field.win, text="Search for mines", # текст кнопки @@ -498,13 +544,19 @@ def main(): command=click_button ) - btn.place(x=50, y=570) + btn.place(x=10, y=560) # Create array with mines objects mines_array = [] + + CostingOfCells() + # Put mines on coordinates PutMines(mines_array) + CheckForChainReaction() + + # Add images of mines in arrays MinesInArrays(mines_array, "../../files/small_mines_images", field.small_image_array, True) MinesInArrays(mines_array, "../../files/large_mines_images", field.large_image_array, False) @@ -514,8 +566,6 @@ def main(): large_directory = "../../files/large_images" ImagesInArray(large_directory, field.large_image_array) - CostingOfCells() - # Add arrow image to Player class images = [] for file in os.listdir("../../files/arrow"): @@ -540,6 +590,7 @@ def main(): # Binding keyboard press to function # field.win.bind("", Action) # field.small_field_canvas.bind("", MouseClickEvent) + # Starting mainloop for window field.win.mainloop() diff --git a/files/decision tree/classifier.joblib b/files/decision tree/classifier.joblib new file mode 100644 index 0000000000000000000000000000000000000000..4f6382f88ac78db6c59c7beb12be2952533f0331 GIT binary patch literal 3723 zcma)9&5smC6z|y`mSI?6faPl!mX$>v5XWWta6qIRc9oA_M_qAgqp{P|(@V9^N5B36 zmpE}XVIY|J2YAqn@umk84&L@+i1EU~#Dv5+F6zZZ6Jxv>Kk8L=%}0?9^A25A@4er9 zuU@@ZHM7`n2XB@g%dh4_-*IxLUABV23DVP!?FMeGdVzAMkmt_3j-Li)-@A~gLtoZd zqbQ2)yP@M#HRv~zbbZOKx{x$dbQ*YNH>5&X#Uw>12w{MMD%M+O$?-x0s|&_Ps#6UO#faK&*ik4Ts5kA3#RAV^mx++T%7WKYvH1Ac^)3*R(g=z>aab_Pb(@i z6R^W(z;v}_p?VsIjaAfsKrGLJ5j}Ygb}~lIFVVBzWhAI@3Pu^P6fRJu-LVC>O2e4Z zM^)TBJftgn;yUb^h4HN3&wwXjZ=p~){~smx(UlM$F0wsZ<#O$cS*chaJaQu{QWK2O z9TM6^>gR(J=cSc~M|luAyXHH&N>mPAzMa6f$`;*ymW)rOuws#5Ujz2f!ehody6CJJ z6AsXnwi6WoPxhy)_~{96t$9VzzbxWawZz^Vx;Hwgq{guw#X7MmkkZJ zgPQ73`48^pzi6tOs4FIYPs7UWq<`Z@3|Yh%)n6HTf*%0Hf^xD)^|M>XowmZwq>g_g@`Xidq8;JQ`+fbV7jkCYM^V?@%sdguB z$>@21lbtx_oQCy+gjWxeh?}oy9uFk8jGX>fJ;)jSyLh%|e|W{WDX-yMgM_yqQfJx} zWl&3veDwOhZ<^{3E{?y)diIA;MVqo3-n>YHFV2&5n`+;s*WOPa`B}vaqfPsJ_Sc=S zj3(^hLx9xnFR2-y44(M@!yiHWBX!H0YG&=NPZw@~ zt(Ler{=U+)Ke^8EeMQ>Lht{>vmreDrFYn&`$N5f`ah*Mj^OgEm^e4A>TpNo0;Ny=Z z*BR&DQ|0>X)t{(eZfCEyl}{ABJ(0T4y{Z0v$Jjmm>pfM}1=l*zb3VJzC!>kDMW1y0 zOKQtkhdw{^<6Tvbv)BEJdx6Kfv*$Rw<4E<4dzCxl-=#UtzzguQRgUQIx|i6qd7%z3 zx1LSNy-u&04x=~c)^?+PCm=lG~(_()gI5f2Z7gO+7RF+rvlb3;arumE;01aPeB? zU$B*(T5HNCa$bcr#xG7u`ZE5wB$x2Yen~Fl_eydZpOWMPFYj02qOk%-)_egW8F4AP-FeSDdp$%Hz}Dv_lZq=AtNuf zfDwXrG%}oD;bWokIO|YZ<3@+t)X)%G|ACK!!PG6Yq z_w%CXeurryk|JBoYPQss>Pqi6Jl1#b_x44Xj|!|1wS4e1V``Z~Y?lGkQzwq)L4U5j z-`%{V_iXa?yj`z6SH@k)I#YG`<}L@#`Z7k7?z^l<9(ldvn#Ay=;D7Ok>$`IJHf@n- zeDv?I!2L@{LjUKnZTj|cGlR#G53kLGJJ0REskyqZgn7k0$EQqxK4^2B-@kq8&)q{D zmwdNw64;{r(R!gyH-B@}gYC=DbFe15e|coCd~>3yX}jdw!wpCD_A)%aH-)Ln?MeTH lWw8ZC?=_q8gjwHp8H^rWzZavqb(+-N|GCL)tc-XTr0!gM{o}LnuuqfO z7j61B-JmHa@a!kK4EINtitC^0adSO#njpu;>Um#O&n7@XoT=9!i literal 0 HcmV?d00001 diff --git a/files/flag/FlagRed.png b/files/flag/FlagRed.png new file mode 100644 index 0000000000000000000000000000000000000000..5b86a021099e84ab7150bb0509b4250caa23055c GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-&H|6fVg?4jBOuH;Rhv(mfq~J? z)5S5QBJS;UM?NM+9#_}BjnUKZ{ddv3TgBq)b>P7Xjmv)yW$cp{X3o8zop|hQo4nKl zMi7eVWPHCj+EeqFk&w#|Ddx>rr^nrYIcGPwPrkwzjUPh#2V4Rf-#sngvS$Xf%$4~5 zYGn5T1$)aYAo!{k5rVu z^;nzmGH4gilUMgL7q&H@nX~k0X{oI4+PBkce@}CrmK`8|KtP~dd#APso5y;?SIx1r z1&SwJs$=8WE?g6J)*)+iKI4R5oqf;tt(ddQ?f87({Hqi57(Ph)GJZUKKjP(m8v)Ks zH$LW_ULZU1xy$xb>YWP|7AvUei?qlxZkZ&z($nSd|7#{4vKJ#Z-(h~+k-D(Qm)XPt eitIBUFv{NuT6ZC;_&zXL89ZJ6T-G@yGywnzl%a(H literal 0 HcmV?d00001 diff --git a/files/flag/FlagYellow.png b/files/flag/FlagYellow.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a980e63bcfa7dad265944615715e8d4dd1363e GIT binary patch literal 439 zcmV;o0Z9IdP)xQm;>g3IbaT$18@fdykcR&sW46wHUy>xNQ90sU4h^r;Z6kf+n#PfFpv;} z=ks>}v`A)D5_^#ZYhqbk!lSA*~W;UF>`J6x`HGC zTHFgQZ0Nh8#r9lfi`Z=dGeOig;4i-!$lfm00w58gx8HaL;iq@ET@l@pw1BG@FMRfd z1tHfB;XBvxZmrjdljIo4fm`@}wXiMFj>L1K@V)RbC`i2h!W9-4go2Eakt5%+eQBi|tf0oU%Aymxke`KSKs(%NthCe5~_zyL#@l|zMQe#ZT`(#`PlAE z_ibEpyPoJbXKlReD6~5yCVVU75etRno)ZbC8w120#05IFcWQbtButmKy7ow6Vy#7k ze7d2)l{e4d#eOvXu3Ye^sH1PbkN(w(X$(7MwQbe^?V6{>QB^!8Ncp@lOQx_O_g%qv zC+@A=pj^$nXnwl8kemPJH_I6v`|HYVzVxN2KXa5?zz9V@n3?t87C5a`S-^G$7>o>_ Lu6{1-oD!M<;-i!4 diff --git a/resources/Globals.py b/resources/Globals.py index 10c2a92..640b612 100644 --- a/resources/Globals.py +++ b/resources/Globals.py @@ -14,7 +14,7 @@ MAX_AMOUNT_OF_MINES = 11 AMOUNT_OF_MINES = random.randint(MIN_AMOUNT_OF_MINES, MAX_AMOUNT_OF_MINES) DELAY_TIME = 0.2 -SLEEP_AFTER_CHECK_MINE = 1 +SLEEP_AFTER_CHECK_MINE = 2 STEP = IMAGE_SIZE + 5 @@ -36,3 +36,6 @@ NUMBER_OF_INDIVIDUALS_FOR_DUEL = 4 NUMBER_OF_POINTS_PERMUTATION = 10 PERCENT_OF_MUTATION = 0.01 PERCENT_OF_OUTGOING_INDIVIDUALS = 0.03 + + +label_text = "" diff --git a/resources/__pycache__/Globals.cpython-37.pyc b/resources/__pycache__/Globals.cpython-37.pyc index 97b57fc635b8eea791c1711da79df528fcc701b6..a28ab9993d1d32e6d0b7f73e7131437ab5e02da8 100644 GIT binary patch delta 95 zcmcb{_KJgB#h@uY ynTK&Ts9& delta 74 zcmaFGc8!hKiI