Contract con_tictactoe_v12


Contract Code


  
1 ### # This is a simple smart contract # All Lamden smart contracts are programmed in Python # For complete contracting documentation please visit https://contracting.lamden.io/ ###
2
3 random.seed()
4 games = Hash(default_value=False)
5 metadata = Hash()
6
7 @construct
8 def seed():
9 metadata['operator'] = ctx.caller
10
11 @export
12 def create_game():
13 sender = ctx.caller
14 assert(games[sender] != False, 'Game already in progress')
15 first = random.randint(0, 99)
16 # 0 = not set, 1 = O, 2 = X
17 if(first <50): first = 1 # Player goes first else: first = 2 # Computer goes first
18 games[sender] = {'first': first, 'state': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'turn': 0}
19 return games[sender]
20
21 @export
22 def end_game():
23 games[ctx.caller] = False
24
25 @export
26 def player_selection(i: int):
27 sender = ctx.caller
28 assert(games[sender] == False, 'No game already in progress')
29 games[sender]['state'][i] = 1
30 assert(games[sender]['state'][i] == 0, f'square {i} is already closed')
31 games[sender]['turn'] = games[sender]['turn'] + 1
32 win = False
33 if(games[sender]['turn'] >= 9):
34 return "{'winner': 'none', 'state': " + f"{games[sender]['state']}" + "}"
35 if(games[sender]['turn'] >= 5):
36 win = checkWin(games[sender]['state'], 1)
37 elif(win == 1):
38 games[sender] = False
39 return "{'winner': sender, 'state': " + f"{games[sender]['state']}" +"}"
40 else:
41 computerSelects = random.randint(0, 8)
42 while(games[sender]['state'][computerSelects] != 0):
43 computerSelects = random.randint(0, 8)
44 games[sender]['state'][computerSelects] = 2
45 games[sender]['turn'] = games[sender]['turn'] + 1
46 if(games[sender]['turn'] >= 9):
47 games[sender] = False
48 return "{'winner': 'none', 'state': " + f"{games[sender]['state']}" + "}"
49 if(games[sender]['turn'] >= 5):
50 win = checkWin(games[sender]['state'], 2)
51 elif(win == 2):
52 games[sender] = False
53 return "{'winner': 'computer', 'state': " + f"{games[sender]['state']}" + "}"
54 return f'{games[sender]}'
55
56 def checkWin(state, x):
57 if(state[0] == x): # top left
58 if(state[1] == x and state[1] == x): #top row
59 return x
60 if(state[3] == x and state[6] == x): #left column
61 return x
62 if(state[4] == x and state[8] == x): # diagnal top left to bottom right
63 return x
64 if(state[1] == x): # top middle
65 if(state[4] == x and state[7] == x): # middle column
66 return x
67 if(state[2] == x): # top right
68 if(state[5] == x and state[8] == x): #right column
69 return x
70 if(state[4] == x and state[6] == x): # diagnal top right to bottom left
71 return x
72 if(state[3] == x): # top middle
73 if(state[4] == x and state[5] == x): # middle row
74 return x
75 if(state[6] == x): # top middle
76 if(state[7] == x and state[8] == x): # bottom row
77 return x

Byte Code

e30000000000000000000000000500000040000000736c00000065006a0183000100650264006401640264038d035a0365026401640464058d025a046406640784005a0565066401830164086409840083015a07650664018301640a640b840083015a086506640183016509640c9c01640d640e840483015a0a640f641084005a0b64115300291246da11636f6e5f746963746163746f655f763132da0567616d65732903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da086d65746164617461290272040000007205000000630000000000000000000000000300000043000000730e00000074006a01740264013c006400530029024eda086f70657261746f722903da03637478da0663616c6c6572da0a5f5f6d65746164617461a900720b000000720b000000da00da045f5f5f5f0600000073020000000001720d000000630000000000000000020000000a00000043000000735c00000074006a017d0074027c00190064016b0364026602731a7403820174046a056403640483027d017c0164056b00723264067d017c016403640364036403640364036403640364036709640364079c0374027c003c0074027c001900530029084e467a1847616d6520616c726561647920696e2070726f6772657373e900000000e963000000e932000000e9010000002903da056669727374da057374617465da047475726e290672080000007209000000da075f5f67616d6573da0e417373657274696f6e4572726f72da0672616e646f6dda0772616e64696e742902da0673656e6465727212000000720b000000720b000000720c000000da0b6372656174655f67616d650a00000073100000000002060114010c010801040116010c01721a000000630000000000000000000000000300000043000000730e0000006401740074016a023c006400530029024e462903721500000072080000007209000000720b000000720b000000720b000000720c000000da08656e645f67616d651600000073020000000002721b0000002901da016963010000000000000004000000040000004300000073c001000074006a017d0174027c01190064016b0264026602731a74038201640374027c011900640419007c003c0074027c011900640419007c00190064056b0264067c009b0064079d036602734e7403820174027c011900640819006403170074027c01190064083c0064017d0274027c0119006408190064096b057290640a74027c011900640419009b001700640b1700530074027c01190064081900640c6b0572b6740474027c01190064041900640383027d0290016e007c0264036b0272dc640174027c013c00640d74027c011900640419009b001700640b1700530074056a066405640e83027d03782674027c011900640419007c03190064056b039001720e74056a066405640e83027d0371ea5700640f74027c011900640419007c033c0074027c011900640819006403170074027c01190064083c0074027c0119006408190064096b0590017268640174027c013c00640a74027c011900640419009b001700640b1700530074027c01190064081900640c6b059001728e740474027c01190064041900640f83027d026e287c02640f6b02900172b6640174027c013c00641074027c011900640419009b001700640b1700530074027c0119009b00530029114e467a1b4e6f2067616d6520616c726561647920696e2070726f677265737372110000007213000000720e0000007a07737175617265207a1220697320616c726561647920636c6f7365647214000000e9090000007a1c7b2777696e6e6572273a20276e6f6e65272c20277374617465273a20da017de9050000007a1c7b2777696e6e6572273a2073656e6465722c20277374617465273a20e908000000e9020000007a207b2777696e6e6572273a2027636f6d7075746572272c20277374617465273a2029077208000000720900000072150000007216000000da0a5f5f636865636b57696e721700000072180000002904721c0000007219000000da0377696eda0f636f6d707574657253656c65637473720b000000720b000000720c000000da10706c617965725f73656c656374696f6e1b0000007336000000000206011401100124011801040110021601100116010801080216020c011801100110011801120108021601120114010a0108021601722500000063020000000000000002000000020000004300000073260100007c00640119007c016b0272607c00640219007c016b0272287c00640219007c016b0272287c0153007c00640319007c016b0272447c00640419007c016b0272447c0153007c00640519007c016b0272607c00640619007c016b0272607c0153007c00640219007c016b0272887c00640519007c016b0272887c00640719007c016b0272887c0153007c00640819007c016b0272cc7c00640919007c016b0272b07c00640619007c016b0272b07c0153007c00640519007c016b0272cc7c00640419007c016b0272cc7c0153007c00640319007c016b0272f47c00640519007c016b0272f47c00640919007c016b0272f47c0153007c00640419007c016b02900172227c00640719007c016b02900172227c00640619007c016b02900172227c01530064005300290a4e720e0000007211000000e903000000e906000000e9040000007220000000e9070000007221000000721f000000720b00000029027213000000da0178720b000000720b000000720c00000072220000003f000000732a00000000010c011801040118010401180104010c01180104010c0118010401180104010c01180104010e011c0172220000004e290c7217000000da0473656564da04486173687215000000720a000000720d000000da085f5f6578706f7274721a000000721b000000da03696e7472250000007222000000720b000000720b000000720b000000720c000000da083c6d6f64756c653e01000000731000000008010e010c030804100c100506011023