116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from operator import mod
 | |
| from tokenize import String
 | |
| from flask import Flask, request, jsonify
 | |
| from flask_cors import CORS
 | |
| 
 | |
| import random as r
 | |
| import math as m
 | |
| 
 | |
| # Suit Order: Hearts, Diamonds, Spades, Clubs
 | |
| # 37 = 9 * 4 + 1 = 9 of Hearts
 | |
| drawn = []
 | |
| drawnnames = []
 | |
| cards = []
 | |
| for i in range(52):
 | |
|     cards.append(i)
 | |
| 
 | |
| ranks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
 | |
| ranknames = ["Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"]
 | |
| suitnames = ["Hearts", "Diamonds", "Spades", "Clubs"]
 | |
| gameDone = False
 | |
| 
 | |
| def toString(data):
 | |
|     str = ""
 | |
|     if len(data) == 1:
 | |
|         return data[0]
 | |
|     else:
 | |
|         for i in data:
 | |
|             if i != data[len(data)-1]:
 | |
|                 str = str + i + ", "
 | |
|             else:
 | |
|                 str = f"{str}and {i}"
 | |
|     return str
 | |
| 
 | |
| def getScore(data):
 | |
|     aces = 0
 | |
|     score = 0
 | |
|     for i in data:
 | |
|         if i == 1:
 | |
|             aces += 1
 | |
|         score += i
 | |
|     print(score)
 | |
|     while (aces > 0) & (score <= 11):
 | |
|         score += 10
 | |
|         aces -= 1
 | |
|     return score
 | |
|     
 | |
| def loseText(score):
 | |
|     if score <= 21:
 | |
|         return ""
 | |
|     else:
 | |
|         return "You have busted! Click reset to play again."
 | |
|         
 | |
| def botLose(data):
 | |
|     if getScore(data) > 21:
 | |
|         return "You won! Click reset to start another game."
 | |
|     else:
 | |
|         return "You lost. Click reset to start another game!"
 | |
| 
 | |
| app = Flask(__name__)
 | |
| CORS(app)
 | |
| @app.route('/api/send', methods=['POST'])
 | |
| def receive_data():
 | |
|     data = request.get_json()
 | |
|     user_message = data.get('message', '')
 | |
|     
 | |
|     
 | |
|     global drawn
 | |
|     global cards
 | |
|     global drawnnames
 | |
|     global gameDone
 | |
|     if user_message == 'reset':
 | |
|         # Suit Order: Hearts, Diamonds, Spades, Clubs
 | |
|         # 37 = 9 * 4 + 1 = 9 of Hearts
 | |
|         drawn = []
 | |
|         drawnnames = []
 | |
|         cards = []
 | |
|         gameDone = False
 | |
|         for i in range(52):
 | |
|             cards.append(i)
 | |
|         return_message = "Game successfully reset"
 | |
|     elif user_message == 'hit':
 | |
|         if getScore(drawn) <= 21:
 | |
|             drawcard = cards[r.randint(0, len(cards)-1)]
 | |
|             cards.remove(drawcard)
 | |
|             drawrank = ranks[m.floor(drawcard/4)]
 | |
|     
 | |
|             drawn.append(drawrank)
 | |
|             drawnnames.append(f"{ranknames[m.floor(drawcard/4)]} of {suitnames[drawcard % 4]}")
 | |
|         else:
 | |
|             gameDone = True
 | |
| 
 | |
|         return_message = f"Your card is the {drawnnames[len(drawnnames)-1]}.\n\nYour cards so far are the {toString(drawnnames)}.\n\nYour current score is {getScore(drawn)}.\n\n{loseText(getScore(drawn))}"
 | |
|     elif user_message == 'stand':
 | |
|         if gameDone:
 | |
|             return_message = "The game is already done! Click reset to try again."
 | |
|         else:
 | |
|             botdrawn = []
 | |
|             botdrawnnames = []
 | |
|             while getScore(botdrawn) <= getScore(drawn):
 | |
|                 drawcard = cards[r.randint(0, len(cards)-1)]
 | |
|                 cards.remove(drawcard)
 | |
|                 drawrank = ranks[m.floor(drawcard/4)]
 | |
|         
 | |
|                 botdrawn.append(drawrank)
 | |
|                 botdrawnnames.append(f"{ranknames[m.floor(drawcard/4)]} of {suitnames[drawcard % 4]}")
 | |
|                 
 | |
|             return_message = f"Your score was {getScore(drawn)}.\n\nThe bot draw the {toString(botdrawnnames)}, obtaining a score of {getScore(botdrawn)}.\n\n{botLose(botdrawn)}"
 | |
|             gameDone = True
 | |
|     else:
 | |
|         return_message = user_message
 | |
| 
 | |
|     print("Backend")
 | |
|     return jsonify({"reply": return_message})
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     app.run(debug=True) |