Skip to content

Commit 40fb56c

Browse files
committed
Implementing a Drag and Drop feature; Still full of bugs
1 parent c155274 commit 40fb56c

File tree

4 files changed

+148
-78
lines changed

4 files changed

+148
-78
lines changed

Big2.py

+66-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
import pygame
22
import sys
3+
4+
from Bots.EasyBot import EasyBot
35
from Utils.Settings import Settings
46
from Utils.Buttons import Buttons
5-
from Game.Game2 import Game2
7+
from Game.Game2Bot import Game2Bot
8+
9+
"""
10+
This is the Big 2. It will represent the client. It will speak to a server.
11+
When a player launches the game, they will become the client.
12+
13+
Big 2 is the class that will communicate to the server through a network.
14+
This game will be run through a client-server networking system.
15+
"""
616

717

818
class Big2:
@@ -68,7 +78,7 @@ def draw_text_menu(self):
6878
title = title_font.render("Big 2", True, (255, 255, 255))
6979
title_width = title_font.size("Big 2")
7080

71-
self.screen.blit(title, (500 - title_width[0]/2, 200 - title_width[1]/2))
81+
self.screen.blit(title, (500 - title_width[0] / 2, 200 - title_width[1] / 2))
7282

7383
self.solo_button.draw_button()
7484
self.multi_button.draw_button()
@@ -244,9 +254,17 @@ def four_player_single_mode(self):
244254
"""
245255
A Game class that is the API. It stores all the methods that is required for you to run a game.
246256
"""
257+
247258
def easy_difficulty(self):
248-
self.game = Game2(self.screen)
249-
self.game.enter_name()
259+
surface = pygame.surface.Surface((self.settings.screen_width, self.settings.screen_height))
260+
surface.fill(self.settings.bg_color)
261+
262+
player_1 = self.enter_name(surface)
263+
player_2 = "easy bot"
264+
# player_2 = EasyBot()
265+
266+
self.game = Game2Bot(surface, self.screen)
267+
self.game.create_player(player_1, player_2)
250268
self.screen.fill(self.settings.bg_color)
251269
self.game.start_game()
252270
self.dragging = False
@@ -389,6 +407,50 @@ def four_player_online_mode(self):
389407

390408
pygame.display.flip()
391409

410+
# Enter name method
411+
def enter_name(self, surface):
412+
entered_name1 = False
413+
player1_name = ""
414+
415+
while not entered_name1:
416+
417+
font = self.settings.game_mode_font
418+
419+
surface.fill(self.settings.bg_color)
420+
pygame.display.flip()
421+
422+
string_size = 0
423+
424+
if not entered_name1:
425+
string = "Enter Player 1 name: " + player1_name
426+
title = font.render(string, True, (255, 255, 255))
427+
title_width = font.size(string)
428+
429+
string_size = title_width[0]
430+
431+
surface.blit(title, (500 - title_width[0]/2, 200 - title_width[1]/2))
432+
433+
self.screen.blit(surface, (0, 0))
434+
pygame.display.flip()
435+
436+
for event in pygame.event.get():
437+
if event.type == pygame.KEYDOWN:
438+
if event.key == pygame.K_RETURN:
439+
if not entered_name1 and player1_name != "":
440+
entered_name1 = True
441+
elif event.key == pygame.K_BACKSPACE:
442+
if not entered_name1 and player1_name != "":
443+
player1_name = player1_name[:-1]
444+
else:
445+
if not entered_name1 and not font.size(event.unicode)[0] + string_size >= 1000:
446+
player1_name += event.unicode
447+
if entered_name1:
448+
break
449+
450+
pygame.display.flip()
451+
452+
return player1_name
453+
392454

393455
# The statement that runs the main program
394456
if __name__ == '__main__':

Bots/EasyBot.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class EasyBot:
2+
def __init__(self):
3+
pass

Game/Game2.py Game/Game2Bot.py

+39-74
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
from Board.Board2 import Board2
2+
from Bots.EasyBot import EasyBot
23
from Game.AbstractGame import AbstractGame
34
from Game.Player import Player
45
from Utils.Buttons import Buttons
5-
import pygame
66

77

8-
class Game2(AbstractGame):
9-
def __init__(self, win):
8+
class Game2Bot(AbstractGame):
9+
def __init__(self, surface, win):
1010

1111
super().__init__(win)
1212

13-
self.surface = pygame.surface.Surface((self.settings.screen_width, self.settings.screen_height))
13+
self.surface = surface
1414
self.surface.fill(self.settings.bg_color)
1515

1616
# The player here will be player 1
17-
self.player1 = Player(self.surface, player_type="player")
18-
self.player2 = Player(self.surface, player_type="opposite")
19-
20-
self.board = Board2(self.display, self.surface, self.player1, self.player2)
17+
self.player1 = None
18+
self.player2 = None
2119

2220
self.turn = "player"
2321

22+
self.board = None
23+
2424
self.have_selected_card_drag = False
2525

2626
# The Play button
@@ -30,77 +30,43 @@ def __init__(self, win):
3030
self.skip_button = Buttons(" Skip ", self.settings.game_button_font,
3131
self.settings.skip_button_x, self.settings.skip_button_y, self.surface)
3232

33-
def start_game(self):
34-
self.deal()
35-
# self.update(p=False, o=False)
36-
37-
# Enter name method
38-
def enter_name(self):
39-
entered_name1 = False
40-
entered_name2 = False
41-
player1_name = ""
42-
player2_name = ""
43-
44-
while not entered_name1 or not entered_name2:
45-
46-
font = self.settings.game_mode_font
47-
48-
self.surface.fill(self.settings.bg_color)
49-
pygame.display.flip()
50-
51-
string_size = 0
52-
53-
if not entered_name1:
54-
string = "Enter Player 1 name: " + player1_name
55-
title = font.render(string, True, (255, 255, 255))
56-
title_width = font.size(string)
57-
58-
string_size = title_width[0]
59-
60-
self.surface.blit(title, (500 - title_width[0]/2, 200 - title_width[1]/2))
61-
62-
elif entered_name1 and not entered_name2:
63-
string = "Enter Player 2 name: " + player2_name
64-
title = font.render(string, True, (255, 255, 255))
65-
title_width = font.size(string)
66-
67-
string_size = title_width[0]
33+
def create_player(self, player1_name, player2):
34+
self.clear()
6835

69-
self.surface.blit(title, (500 - title_width[0]/2, 200 - title_width[1]/2))
36+
if type(player1_name) is str:
37+
self.player1 = Player(self.surface, player_type="player")
38+
self.player1.enter_name(player1_name)
39+
else:
40+
self.player1 = player1_name
7041

71-
self.display.blit(self.surface, (0, 0))
72-
pygame.display.flip()
42+
if type(player2) is str:
43+
self.player2 = Player(self.surface, player_type="opposite")
44+
self.player2.enter_name(player2)
45+
else:
46+
self.player2 = player2
7347

74-
for event in pygame.event.get():
75-
if event.type == pygame.KEYDOWN:
76-
if event.key == pygame.K_RETURN:
77-
if not entered_name1 and player1_name != "":
78-
entered_name1 = True
79-
elif not entered_name2 and player2_name != "":
80-
entered_name2 = True
81-
elif event.key == pygame.K_BACKSPACE:
82-
if not entered_name1 and player1_name != "":
83-
player1_name = player1_name[:-1]
84-
elif not entered_name2 and player2_name != "":
85-
player2_name = player2_name[:-1]
86-
else:
87-
if not entered_name1 and not font.size(event.unicode)[0] + string_size >= 1000:
88-
player1_name += event.unicode
89-
elif entered_name1 and not entered_name2 \
90-
and not font.size(event.unicode)[0] + string_size >= 1000:
91-
player2_name += event.unicode
48+
self.board = Board2(self.display, self.surface, self.player1, self.player2)
9249

93-
if entered_name2 and entered_name1:
94-
break
50+
self.draw_player_name()
9551

96-
pygame.display.flip()
52+
def draw_player_name(self):
53+
if type(self.player1) is Player:
54+
self.player1.draw_name()
55+
elif type(self.player1) is EasyBot:
56+
pass
57+
# elif type(self.player1) is HardBot:
58+
# pass
9759

98-
self.player1.enter_name(player1_name)
99-
self.player2.enter_name(player2_name)
60+
if type(self.player2) is Player:
61+
self.player2.draw_name()
62+
elif type(self.player2) is EasyBot:
63+
pass
64+
# elif type(self.player1) is HardBot:
65+
# pass
10066

101-
self.clear()
102-
self.player1.draw_name()
103-
self.player2.draw_name()
67+
def start_game(self):
68+
self.deal()
69+
# self.update(p=False, o=False)
10470

10571
# Dealing The Card
10672
def deal(self):
@@ -122,8 +88,7 @@ def select(self, mouse_x, mouse_y):
12288
# Draw the player's .display.flip()names
12389
# Draw the buttons
12490
def update(self, s=True, o=True, c=True, d=True, p=True, gu=False):
125-
self.player1.draw_name()
126-
self.player2.draw_name()
91+
self.draw_player_name()
12792
self.skip_button.draw_button()
12893
self.play_button.draw_button()
12994
self.board.draw_board(shuffle=s, opposite=o, current=c, discard=d, player=p, gu=gu)

Network/Server.py

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import socket
2+
from _thread import *
3+
4+
server = "192.168.1.241"
5+
port = 5555
6+
7+
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
8+
9+
try:
10+
s.bind((server, port))
11+
except socket.error as e:
12+
str(e)
13+
14+
s.listen(2)
15+
print("Waiting for a connection, Server Started.")
16+
17+
18+
def threaded_client(connections):
19+
while True:
20+
try:
21+
data = connections.recv(2048)
22+
reply = data.decode("utf-8")
23+
24+
if not data:
25+
print("Disconnected.")
26+
break
27+
else:
28+
print("Received: ", reply)
29+
print("Sending: ", reply)
30+
31+
connections.sendall(str.encode(reply))
32+
except:
33+
break
34+
35+
36+
while True:
37+
conn, addr = s.accept()
38+
print("Connected to: ", addr)
39+
40+
start_new_thread(threaded_client, (conn,))

0 commit comments

Comments
 (0)