-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathControl.py
More file actions
134 lines (125 loc) · 7.43 KB
/
Copy pathControl.py
File metadata and controls
134 lines (125 loc) · 7.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
"""Mouse control class"""
import pygame
from pygame.locals import *
import random
import math
import time
import numpy as np
import copy
from tree import Tree, Node
import aitree
import ailist
import View
class PyGameController(object):
""" Handles keyboard input"""
def __init__(self,model,view):
self.model = model
self.view = view
self.model.letter_chosen = None
self.current_player = None
def handle_event(self,event):
"""
Run the AI when necessary
"""
if self.model.current_player.name == 'Richard':
if event.type == MOUSEBUTTONDOWN:
if pygame.mouse.get_pressed()[0]:
print "Richard is thinking..."
tic = time.time()
#print "recognized a left click"
spots = self.model.find_spots()
move = aitree.parse_through_list(spots,self.model.current_player.inventory.string)
if move:
#print 'Richards move info', move
self.model.make_AI_move(move)
# # Here's where we will actually put the word down.
self.model.current_player.inventory.pick_letters(self.model)
self.model.board = self.model.proposed_board.copy()
else:
for i in range(6):
self.model.bag_contents.put_back(self.model.current_player.inventory.letters_inhand[i].letter)
del self.model.current_player.inventory.letters_inhand[:]
self.model.current_player.inventory.pick_letters(self.model)
#print self.model.current_player.inventory.string
toc = time.time()
self.model.current_player.increase_time(tic,toc)
self.model.turn_number += 1
self.view.print_current_info()
elif self.model.current_player.name == 'Nixon':
if event.type == MOUSEBUTTONDOWN:
if pygame.mouse.get_pressed()[0]:
print "Nixon is thinking..."
tic = time.time()
#print "recognized a left click"
spots = self.model.find_spots()
move = ailist.parse_through_list(spots,self.model.current_player.inventory.string)
#print 'Nixons move info', move
if move:
#print 'move info', move
self.model.make_AI_move(move)
# # Here's where we will actually put the word down.
self.model.current_player.inventory.pick_letters(self.model)
self.model.board = self.model.proposed_board.copy()
else:
for i in range(6):
self.model.bag_contents.put_back(self.model.current_player.inventory.letters_inhand[i].letter)
del self.model.current_player.inventory.letters_inhand[:]
self.model.current_player.inventory.pick_letters(self.model)
#print self.model.current_player.inventory.string
toc = time.time()
self.model.current_player.increase_time(tic,toc)
self.model.turn_number += 1
self.view.print_current_info()
#print self.model.current_player.name + "'s score:", self.model.current_player.score
#print self.model.current_player.name + "'s time:", self.model.current_player.clock
else:
if event.type != MOUSEBUTTONDOWN:
if event.type is pygame.KEYDOWN:
if event.key ==pygame.K_SPACE:
#move complete, refill inventory
if len(self.model.current_player.inventory.letters_inhand) == 7:
#Give up turn, get new tiles
for i in range(6):
self.model.bag_contents.put_back(self.model.current_player.inventory.letters_inhand[i].letter)
del self.model.current_player.inventory.letters_inhand[:]
self.model.current_player.inventory.pick_letters(self.model)
self.model.turn_number +=1
else:
word = self.model.is_legal()
if word != False:
del self.model.proposed_positions[:]
self.model.current_player.update_score(word)
self.model.current_player.inventory.pick_letters(self.model)
self.model.turn_number +=1
self.model.board = self.model.proposed_board.copy()
else:
self.model.current_player.inventory.letters_inhand.extend(self.model.current_player.inventory.placed_letters)
self.model.proposed_board = self.model.board.copy()
self.model.proposed_positions = []
self.model.proposed_word = ''
self.model.current_player.inventory.placed_letters = []
self.view.print_current_info()
elif event.type == MOUSEBUTTONDOWN:
if pygame.mouse.get_pressed()[0]: #left mouse button
#if left click -> Select this tile from inventory
if pygame.mouse.get_pos()[1]> 640 and pygame.mouse.get_pos()[1] < 680:
#only select if mouse if hovering on an inventory tile
self.model.letter_chosen = self.model.current_player.inventory.letters_inhand[(pygame.mouse.get_pos()[0] -160)/40]
self.indexofletterchosen = int((pygame.mouse.get_pos()[0] -160)/40)
else:
print 'Left click to select a tile, right click to place on board'
if pygame.mouse.get_pressed()[2] and self.model.letter_chosen: #right mouse button
#if right click -> place chosen tile on spot selected
#check to see if place is already occupied
if self.model.board[(pygame.mouse.get_pos()[0])/40, (pygame.mouse.get_pos()[1])/40] == None:
self.model.letter_chosen.x = pygame.mouse.get_pos()[0]/40
self.model.letter_chosen.x *= 40
self.model.letter_chosen.y = pygame.mouse.get_pos()[1]/40
self.model.letter_chosen.y *= 40
self.model.proposed_positions.append([self.model.letter_chosen.x,self.model.letter_chosen.y])
#copy the tile to the board
self.model.proposed_board[(pygame.mouse.get_pos()[0])/40, (pygame.mouse.get_pos()[1])/40] = copy.copy(self.model.letter_chosen)
#next delete letter chosen from inventory
self.model.current_player.inventory.add_placed_tile(self.model.current_player.inventory.letters_inhand[self.indexofletterchosen])
self.model.current_player.inventory.letters_inhand.pop(self.indexofletterchosen)
self.model.letter_chosen = None #can't use same letter again