Graphical User Interface
Task description: Cannon games
You will use a variation of the code from Exercise 9 to create a cannonball game. The player should put strength and angle to the cannon to hit an object on the ground a distance away from the cannon. Use the techniques from practice 9 to calculate the trajectory of the cannonball. There should be an option box for whether the game will use air resistance or not.
To be able to render the results of the integrator as an animation instead of a regular plot, is one alternative integrator added to the exercise. This integrator returns its results through repeated calls to the next () method. So every time you update the animation, call next () to get out next value from the integrator.
An example of the GUI is shown below. The cannon is at the bottom left. The red square is the goal the player must hit. The black balls are cannonballs the player shoots. The white box is an obstacle which the player must shoot over to hit the target.
Volunteer: Wind can be a voluntary additional task, the wind is random for each shot and should be shown to the player so that the player can compensate. The goal is to hit the target with as few shots as possible.
Voluntary: Create terrain that the bullet cannot get through so the player has to shoot more upwards to hit (must shoot over the terrain).

Solution PreviewSolution Preview

These solutions may offer step-by-step problem-solving explanations or good writing examples that include modern styles of formatting and construction of bibliographies out of text citations and references. Students may use these solutions for personal skill-building and practice. Unethical use is strictly forbidden.

import tkinter as tk
import numpy as np
import matplotlib.pyplot as plt
import math

class Basis:                                        # Class with gravity - without air-resistance
    def __init__(self, tyng):
       self.tyng = tyng                            # tyng = gravitaional acceleration
    # Function for gravity class. tidspunkt = time, tilstandsvektor = vector (used as parameter)
    def evaluate(self, tidspunkt, tilstandsvektor):
       x_pos = 0                           # x acceleration
       y_pos = self.tyng                   # y acceleration
       x_fart = tilstandsvektor[2]         # x_fart = x_velocity
       y_fart = tilstandsvektor[3]         # y_fart = y_velocity
       endring = np.array([x_fart, y_fart, x_pos, y_pos])*tidspunkt       # endring = change
       return endring                                                      # returning [new_x, new_y, new_xDot, new_yDot] vector

class Luft:                                  # Class where drag is applied. Luft = Air (with air resistance)

    def __init__(self, tyng, luftm):                         # luftm = drag (parameter - air resistance)
       self.tyng = tyng
       self.luftm = luftm

    def evaluate(self, tidspunkt, tilstandsvektor):             #   function for drag
       x_fart = tilstandsvektor[2]                            #   same as in the previous class function
       y_fart = tilstandsvektor[3]
       F = math.sqrt(x_fart**2 + y_fart**2)                   # F = V for velocity
       x_pos = -(self.luftm * x_fart * F)                      # x position
       y_pos = self.tyng - (self.luftm...

By purchasing this solution you'll be able to access the following files:

for this solution

or FREE if you
register a new account!

PayPal, G Pay, ApplePay, Amazon Pay, and all major credit cards accepted.

Find A Tutor

View available Python Programming Tutors

Get College Homework Help.

Are you sure you don't want to upload any files?

Fast tutor response requires as much info as possible.

Upload a file
Continue without uploading

We couldn't find that subject.
Please select the best match from the list below.

We'll send you an email right away. If it's not in your inbox, check your spam folder.

  • 1
  • 2
  • 3
Live Chats