The function moves its sprite forward the specified amount of steps in the direction it is facing. A step is equal to one-pixel length.
The block actually uses Trigonometry to move in the proper direction, as that is how a computer handles it.
Function Definition: move(steps = 10)
Name | Type | Description | Expected Values | Default Value |
---|---|---|---|---|
steps | int | The number of steps to move. | 0-500 | 10 |
The function moves its sprite forward the specified amount of steps in the direction it is facing. A step is equal to one-pixel length.
The block actually uses Trigonometry to move in the proper direction, as that is how a computer handles it.
sprite = Sprite('Beetle')
sprite.setdirection(90)
sprite.gotoxy(0, 0)
while True:
if sprite.iskeypressed('up arrow'):
sprite.move(3)
if sprite.iskeypressed('down arrow'):
sprite.move(-3)
if sprite.iskeypressed('left arrow'):
sprite.left(3)
if sprite.iskeypressed('right arrow'):
sprite.right(3)
sprite = Sprite('Tobi')
import time
sprite.setrotationstyle('left-right')
while True:
sprite.move(5)
sprite.bounceonedge()
sprite.switchcostume("Tobi walking 1")
time.sleep(0.1)
sprite.move(5)
sprite.bounceonedge()
sprite.switchcostume("Tobi walking 2")
time.sleep(0.1)
In this example, we will make the computer program that controls a “quadruped” (a four-legged robot). It’s like a remote control car, except with four legs instead of four wheels. You can press different keys on the keyboard to make the quadruped move forward, backward, turn left and turn right.
The Quadruped will move according to the following logic:
The program uses the up, down, left, and right arrows to control the robot and make it move forward, backward, left, and right. Every time you press one of the arrows, Quadruped will move in the direction you choose for specific steps.
sprite = Sprite('Tobi')
quarky = Quarky()
import time
quad=Quadruped(4,1,8,5,3,2,7,6)
quad.home()
while True:
if sprite.iskeypressed("up arrow"):
quad.move("forward",1000,1)
time.sleep(1)
if sprite.iskeypressed("down arrow"):
quad.move("backward",1000,1)
if sprite.iskeypressed("left arrow"):
quad.move("turn left",1000,1)
if sprite.iskeypressed("right arrow"):
quad.move("turn right",1000,1)
This project demonstrates how to use Machine Learning Environment to make a machine–learning model that identifies hand gestures and makes the quadruped move accordingly.
To test the model, simply enter the input values in the “Testing” panel and click on the “Predict” button.
The model will return the probability of the input belonging to the classes.
Click on the “Export Model” button on the top right of the Testing box, and PictoBlox will load your model into the Python Coding Environment if you have opened the ML Environment in Python Coding.
The following code appears in the Python Editor of the selected sprite.
####################imports####################
# Do not change
import numpy as np
import tensorflow as tf
import time
quarky=Quarky
quad=Quadruped(4,1,8,5,3,2,7,6)
# Do not change
####################imports####################
#Following are the model and video capture configurations
# Do not change
model=tf.keras.models.load_model(
"num_model.h5",
custom_objects=None,
compile=True,
options=None)
pose = Posenet() # Initializing Posenet
pose.enablebox() # Enabling video capture box
pose.video("on",0) # Taking video input
class_list=['Forward','Backward','Left','Right','Stop'] # List of all the classes
# Do not change
###############################################
#This is the while loop block, computations happen here
# Do not change
while True:
pose.analysehand() # Using Posenet to analyse hand pose
coordinate_xy=[]
# for loop to iterate through 21 points of recognition
for i in range(21):
if(pose.gethandposition(1,i,0)!="NULL" or pose.gethandposition(2,i,0)!="NULL"):
coordinate_xy.append(int(240+float(pose.gethandposition(1,i,0))))
coordinate_xy.append(int(180-float(pose.gethandposition(2,i,0))))
else:
coordinate_xy.append(0)
coordinate_xy.append(0)
coordinate_xy_tensor = tf.expand_dims(coordinate_xy, 0) # Expanding the dimension of the coordinate list
predict=model.predict(coordinate_xy_tensor) # Making an initial prediction using the model
predict_index=np.argmax(predict[0], axis=0) # Generating index out of the prediction
predicted_class=class_list[predict_index] # Tallying the index with class list
print(predicted_class)
# Do not change
Add this code in
def runQuarky(predicted_class):
if pose.ishanddetected():
if predicted_class == "Forward":
quad.move("forward",1000,1)
elif predicted_class == "Backward":
quad.move("backward",1000,1)
elif predicted_class == "Left":
quad.move("turn left",1000,1)
elif predicted_class == "Right":
quad.move("turn right",1000,1)
elif predicted_class == "Stop":
quad.home()
####################imports####################
# Do not change
import numpy as np
import tensorflow as tf
import time
quarky=Quarky
quad=Quadruped(4,1,8,5,3,2,7,6)
# Do not change
####################imports####################
#Following are the model and video capture configurations
# Do not change
model=tf.keras.models.load_model(
"num_model.h5",
custom_objects=None,
compile=True,
options=None)
pose = Posenet() # Initializing Posenet
pose.enablebox() # Enabling video capture box
pose.video("on",0) # Taking video input
class_list=['Forward','Backward','Left','Right','Stop'] # List of all the classes
def runQuarky(predicted_class):
if pose.ishanddetected():
if predicted_class == "Forward":
quad.move("forward",1000,1)
elif predicted_class == "Backward":
quad.move("backward",1000,1)
elif predicted_class == "Left":
quad.move("turn left",1000,1)
elif predicted_class == "Right":
quad.move("turn right",1000,1)
elif predicted_class == "Stop":
quad.home()
# Do not change
###############################################
#This is the while loop block, computations happen here
# Do not change
while True:
pose.analysehand() # Using Posenet to analyse hand pose
coordinate_xy=[]
# for loop to iterate through 21 points of recognition
for i in range(21):
if(pose.gethandposition(1,i,0)!="NULL" or pose.gethandposition(2,i,0)!="NULL"):
coordinate_xy.append(int(240+float(pose.gethandposition(1,i,0))))
coordinate_xy.append(int(180-float(pose.gethandposition(2,i,0))))
else:
coordinate_xy.append(0)
coordinate_xy.append(0)
coordinate_xy_tensor = tf.expand_dims(coordinate_xy, 0) # Expanding the dimension of the coordinate list
predict=model.predict(coordinate_xy_tensor) # Making an initial prediction using the model
predict_index=np.argmax(predict[0], axis=0) # Generating index out of the prediction
predicted_class=class_list[predict_index] # Tallying the index with class list
print(predicted_class)
runQuarky(predicted_class)
# Do not change
Humanoid is a class in a programming code that is used to control the movements of a humanoid robot. The code provides specific pins to control the robot’s movement, and it allows the robot to perform a series of actions such as dancing, flapping, moving forward, and other actions. We can learn how to program a humanoid robot to dance.
sprite = Sprite('Tobi')
quarky=Quarky()
import time
humanoid = Humanoid(7,2,6,3,8,1)
quarky.showemotion("surprise")
humanoid.home()
humanoid.move("forward",1000,1)
quarky.playsound("QuarkyIntro")
humanoid.action("flapping",1000,1)
time.sleep(1)
humanoid.action("dance2",1000,1)
time.sleep(1)
humanoid.action("moonwalker",1000,1)
time.sleep(1)
humanoid.action("dance1",1000,1)
time.sleep(1)
humanoid.action("forward",1000,1)
time.sleep(1)
Humanoid.action("tiptoeswing",1000,1)
time.sleep(1)
Humanoid.action("swing",1000,1)
time.sleep(1)
Humanoid.action("flapping",1000,1)
time.sleep(1)
Humanoid.action("updown",1000,1)
Humanoid.home()
One of the most fascinating activities is face tracking, in which the Quarky can detect a face and move its head in the same direction as yours. How intriguing it sounds, so let’s get started with the coding for a face-tracking robot.
sprite = Sprite('Tobi')
quarky=Quarky()
import time
import math
humanoid = Humanoid(7,2,6,3,8,1)
fd = FaceDetection()
fd.video("on", 0)
fd.enablebox()
fd.setthreshold(0.5)
time.sleep(1)
Angle=0
while True:
fd.analysestage()
for i in range(fd.count()):
sprite.setx(fd.x(i + 1))
sprite.sety(fd.y(i + 1))
sprite.setsize(fd.width(i + 1))
Angle=fd.width(i + 1)
angle=int(float(Angle))
if angle>90:
humanoid.move("left",1000,3)
elif angle<90:
humanoid.move("right",1000,3)
time.sleep(1)
else:
humanoid.home()
A face-tracking robot is a type of robot that uses sensors and algorithms to detect and track human faces in real time. The robot’s sensors, such as cameras or infrared sensors, capture images or videos of the surrounding environment and use computer vision techniques to analyze the data and identify human faces. One of the most fascinating activities is face tracking, in which the Quadruped can detect a face and move its head in the same direction as yours. How intriguing it sounds, so let’s get started with the coding for a face-tracking Quadruped robot.
we will learn how to use face detection to control the movement of a Quadruped robot and how to incorporate external inputs into a program to create more interactive and responsive robotics applications.
sprite = Sprite('Tobi')
quarky=Quarky()
import time
import math
quad=Quadruped(4,1,8,5,3,2,7,6)
fd = FaceDetection()
fd.video("on", 0)
fd.enablebox()
fd.setthreshold(0.5)
time.sleep(1)
Angle=0
while True:
fd.analysestage()
for i in range(fd.count()):
sprite.setx(fd.x(i + 1))
sprite.sety(fd.y(i + 1))
sprite.setsize(fd.width(i + 1))
Angle=fd.width(i + 1)
angle=int(float(Angle))
if angle>90:
quad.move("lateral right",1000,1)
elif angle<90:
quad.move("lateral left",1000,1)
else:
quad.home()
Our next step is to check whether it is working right or not. Whenever your face will come in front of the camera, it should detect it and as you move to the right or left, the head of your Quadruped robot should also move accordingly.
In this example project, we are going to create a Machine Learning Model where shark run by the user and fish automatically feed on randomly generated food while escaping from sharks.
sprite = Sprite('Fish')
sprite1 = Sprite('Orange')
sprite2 = Sprite('Shark 2')
sprite3 = Sprite('Button3')
import random
import time
import tensorflow as tf
import pandas as pd
import os
import math
curr_x = 25
curr_y = 108
shark_x=-177
shark_y=116
score=0
chance=5
fish_d=20
fish_m=25
shark_m=4
angle_f=90
angle_s=90
sprite.setx(curr_x)
sprite.sety(curr_y)
sprite2.setx(shark_x)
sprite2.sety(shark_y)
sprite.setdirection(DIRECTION=angle_f)
sprite2.setdirection(DIRECTION=angle_s)
def settarget(t):
x = random.randrange(-200, 200, t)
y = random.randrange(-155, 155, t)
x1 = random.randrange(-200, 200, t)
y1 = random.randrange(-155, 155, t)
x2 = random.randrange(-200, 200, t)
y2 = random.randrange(-155, 155, t)
time.sleep(0.1)
sprite1.setx(x1)
sprite1.sety(y1)
sprite.setx(x)
sprite.sety(y)
sprite2.setx(x2)
sprite2.sety(y2)
return x, y, x1, y1, x2, y2
def settarget1(m):
x = random.randrange(-200, 200, m)
y = random.randrange(-155, 155, m)
time.sleep(0.1)
sprite1.setx(x)
sprite1.sety(y)
return x, y
target_x, target_y = settarget(40)
target_x, target_y = settarget1(40)
if(os.path.isfile('Chase_Data.csv')):
data=pd.read_csv('Chase_Data.csv')
else:
data = pd.DataFrame({"curr_X": curr_x, "curr_Y": curr_y,"shark_X": shark_x, "shark_Y": shark_y, "tar_x": target_x, "tar_y": target_y, "diff_x":curr_x-target_x, "diff_y":curr_y-target_y, "diff_x1":shark_x-curr_x, "diff_y1":shark_y-curr_y, "direction_f": angle_f, "direction_s": angle_s, "Action": "RIGHT"}, index=[0])
while True:
sprite2.spriteRequest.requestCommand("motion_pointtowards", {"TOWARDS": "Fish"})
sprite2.move(shark_m)
angle_f=sprite.direction()
angle_s=sprite2.direction()
anglef=math.floor(angle_f)
angles=math.floor(angle_s)
if sprite.iskeypressed("up arrow"):
data = data.append({"curr_X": curr_x, "curr_Y": curr_y,"shark_X": shark_x, "shark_Y": shark_y, "tar_x": target_x, "tar_y": target_y, "diff_x":curr_x-target_x, "diff_y":curr_y-target_y, "diff_x1":shark_x-curr_x, "diff_y1":shark_y-curr_y, "direction_f": anglef, "direction_s": angles, "Action": "UP"}, ignore_index=True)
sprite.move(fish_m)
if sprite.iskeypressed("left arrow"):
data = data.append({"curr_X": curr_x, "curr_Y": curr_y,"shark_X": shark_x, "shark_Y": shark_y, "tar_x": target_x, "tar_y": target_y, "diff_x":curr_x-target_x, "diff_y":curr_y-target_y, "diff_x1":shark_x-curr_x, "diff_y1":shark_y-curr_y, "direction_f": anglef, "direction_s": angles, "Action": "LEFT"}, ignore_index=True)
angle = anglef - fish_d
sprite.setdirection(DIRECTION=angle)
if sprite.iskeypressed("right arrow"):
data = data.append({"curr_X": curr_x, "curr_Y": curr_y,"shark_X": shark_x, "shark_Y": shark_y, "tar_x": target_x, "tar_y": target_y, "diff_x":curr_x-target_x, "diff_y":curr_y-target_y, "diff_x1":shark_x-curr_x, "diff_y1":shark_y-curr_y, "direction_f": anglef, "direction_s": angles, "Action": "RIGHT"}, ignore_index=True)
angle = anglef + fish_d
sprite.setdirection(DIRECTION=angle)
if(score>0 and score%2==0):
data.to_csv('Chase_Data.csv',index=False)
if abs(shark_x-curr_x)<20 and abs(shark_y-curr_y)<20:
chance= chance-1
if abs(shark_x-curr_x)<20 and abs(shark_y-curr_y)<20:
chance= chance-1
curr_x, curr_y, target_x, target_y, shark_x, shark_y = settarget(40)
sprite3.say(("score: ",score ," and chance: ",chance,""))
if (chance == 0):
data.to_csv('Chase_Data.csv',index=False)
curr_x, curr_y, target_x, target_y, shark_x, shark_y = settarget(40)
chance=5
if abs(curr_x-target_x)<20 and abs(curr_y-target_y)<20:
score = score + 1
sprite.say(("your score is: {}".format(score)))
if (score >= 40):
print(data)
data.to_csv('Chase Data.csv')
break
target_x, target_y = settarget1()
curr_x=math.floor(sprite.x())
curr_y=math.floor(sprite.y())
shark_x=math.floor(sprite2.x())
shark_y=math.floor(sprite2.y())
time.sleep(0.02)
sprite = Sprite('Fish')
sprite1 = Sprite('Orange')
sprite2 = Sprite('Shark 2')
sprite3 = Sprite('Button3')
import random
import time
import numpy as np
import tensorflow as tf
import pandas as pd
import os
import math
curr_x = 25
curr_y = 108
shark_x=-177
shark_y=116
score=0
chance=5
fish_d=20
fish_m=25
shark_m=4
angle_f=90
angle_s=90
sprite3.say(("score: ",score ," and chance: ",chance,""))
sprite.setx(curr_x)
sprite.sety(curr_y)
sprite2.setx(shark_x)
sprite2.sety(shark_y)
sprite.setdirection(DIRECTION=angle_f)
sprite2.setdirection(DIRECTION=angle_s)
def settarget(t):
x = random.randrange(-200, 200, t)
y = random.randrange(-155, 155, t)
x1 = random.randrange(-200, 200, t)
y1 = random.randrange(-155, 155, t)
x2 = random.randrange(-200, 200, t)
y2 = random.randrange(-155, 155, t)
time.sleep(0.1)
sprite1.setx(x1)
sprite1.sety(y1)
sprite.setx(x)
sprite.sety(y)
sprite2.setx(x2)
sprite2.sety(y2)
return x, y, x1, y1, x2, y2
def settarget1(m):
x = random.randrange(-200, 200, m)
y = random.randrange(-155, 155, m)
time.sleep(0.1)
sprite1.setx(x)
sprite1.sety(y)
return x, y
target_x, target_y = settarget1(40)
if(os.path.isfile('Chase_Data.csv')):
data=pd.read_csv('Chase_Data.csv')
else:
data = pd.DataFrame({"curr_X": curr_x, "curr_Y": curr_y,"shark_X": shark_x, "shark_Y": shark_y, "tar_x": target_x, "tar_y": target_y, "diff_x":curr_x-target_x, "diff_y":curr_y-target_y, "diff_x1":shark_x-curr_x, "diff_y1":shark_y-curr_y, "direction_f": angle_f, "direction_s": angle_s, "Action": "RIGHT"}, index=[0])
while True:
# sprite2.pointto()
sprite2.spriteRequest.requestCommand("motion_pointtowards", {"TOWARDS": "Fish"})
sprite2.move(shark_m)
angle_f=sprite.direction()
angle_s=sprite2.direction()
anglef=math.floor(angle_f)
angles=math.floor(angle_s)
if sprite.iskeypressed("up arrow"):
data = data.append({"curr_X": curr_x, "curr_Y": curr_y,"shark_X": shark_x, "shark_Y": shark_y, "tar_x": target_x, "tar_y": target_y, "diff_x":curr_x-target_x, "diff_y":curr_y-target_y, "diff_x1":shark_x-curr_x, "diff_y1":shark_y-curr_y, "direction_f": anglef, "direction_s": angles, "Action": "UP"}, ignore_index=True)
sprite.move(fish_m)
if sprite.iskeypressed("left arrow"):
data = data.append({"curr_X": curr_x, "curr_Y": curr_y,"shark_X": shark_x, "shark_Y": shark_y, "tar_x": target_x, "tar_y": target_y, "diff_x":curr_x-target_x, "diff_y":curr_y-target_y, "diff_x1":shark_x-curr_x, "diff_y1":shark_y-curr_y, "direction_f": anglef, "direction_s": angles, "Action": "LEFT"}, ignore_index=True)
angle = anglef - fish_d
sprite.setdirection(DIRECTION=angle)
if sprite.iskeypressed("right arrow"):
data = data.append({"curr_X": curr_x, "curr_Y": curr_y,"shark_X": shark_x, "shark_Y": shark_y, "tar_x": target_x, "tar_y": target_y, "diff_x":curr_x-target_x, "diff_y":curr_y-target_y, "diff_x1":shark_x-curr_x, "diff_y1":shark_y-curr_y, "direction_f": anglef, "direction_s": angles, "Action": "RIGHT"}, ignore_index=True)
angle = anglef + fish_d
sprite.setdirection(DIRECTION=angle)
if(score>0 and score%2==0):
data.to_csv('Chase_Data.csv',index=False)
if abs(shark_x-curr_x)<20 and abs(shark_y-curr_y)<20:
chance= chance-1
curr_x, curr_y, target_x, target_y, shark_x, shark_y = settarget(40)
sprite3.say(("score: ",score ," and chance: ",chance,""))
if (chance == 0):
data.to_csv('Chase_Data.csv',index=False)
curr_x, curr_y, target_x, target_y, shark_x, shark_y = settarget(40)
chance=5
if abs(curr_x-target_x)<20 and abs(curr_y-target_y)<20:
score = score + 1
sprite3.say(("score: ",score ," and chance: ",chance,""))
if (score >= 50):
data.to_csv('Chase_Data.csv',index=False)
break
target_x, target_y = settarget1(40)
curr_x=math.floor(sprite.x())
curr_y=math.floor(sprite.y())
shark_x=math.floor(sprite2.x())
shark_y=math.floor(sprite2.y())
time.sleep(0.02)
Datasets on the internet are hardly ever fit to directly train on. Programmers often have to take care of unnecessary columns, text data, target columns, correlations, etc. Thankfully, PictoBlox’s ML Environment is packed with features to help us pre-process the data as per our liking.
Let’s create the ML model.
Alert: The Machine Learning Environment for model creation is available in the only desktop version of PictoBlox for Windows, macOS, or Linux. It is not available in Web, Android, and iOS versions.
Follow the steps below:
Datasets can either be uploaded or created on the ML Environment. Lets see how it is done.
Notes:
After data is pre-processed and optimized, it’s fit to be used in model training. To train the model, simply click the “Train Model” button found in the “Training” panel.
By training the model, meaningful information is extracted from the numbers, and that in turn updates the weights. Once these weights are saved, the model can be used to make predictions on data previously unseen.
The model’s function is to use the input data and predict the output. The target column must always contain numbers.
However, before training the model, there are a few hyperparameters that need to be understood. Click on the “Advanced” tab to view them.
There are three hyperparameters that can be altered in the Numbers(C/R) Extension:
It’s a good idea to train a numeric classification model for a high number of epochs. The model can be trained in both JavaScript and Python. In order to choose between the two, click on the switch on top of the Training panel.
The accuracy of the model should increase over time. The x-axis of the graph shows the epochs, and the y-axis represents the accuracy at the corresponding epoch.
A window will open. Type in a project name of your choice and select the “Numbers(C/R)” extension. Click the “Create Project” button to open the Numbers(C/R) window.
To test the model, simply enter the input values in the “Testing” panel and click on the “Predict” button.
The model will return the probability of the input belonging to the classes.
Click on the “PictoBlox” button, and PictoBlox will load your model into the Python Coding Environment if you have opened the ML Environment in Python Coding.
sprite = Sprite('Fish')
sprite1 = Sprite('Orange')
sprite2 = Sprite('Shark 2')
sprite3 = Sprite('Button3')
import random
import time
import tensorflow as tf
import pandas as pd
import os
import math
curr_x = 25
curr_y = 108
shark_x=-177
shark_y=116
score=0
chance=5
fish_d=20
fish_m=35
shark_m=25
shark_d= 20
angle_f=90
angle_s=90
sprite.setx(curr_x)
sprite.sety(curr_y)
sprite2.setx(shark_x)
sprite2.sety(shark_y)
sprite.setdirection(DIRECTION=angle_f) sprite2.setdirection(DIRECTION=angle_s)
def settarget1(t):
x = random.randrange(-200, 200, t)
y = random.randrange(-155, 155, t)
x1 = random.randrange(-200, 200, t)
y1 = random.randrange(-155, 155, t)
x2 = random.randrange(-200, 200, t)
y2 = random.randrange(-155, 155, t)
time.sleep(0.1)
sprite1.setx(x1)
sprite1.sety(y1)
sprite.setx(x)
sprite.sety(y)
sprite2.setx(x2)
sprite2.sety(y2)
return x, y, x1, y1, x2, y2
def settarget(m):
x = random.randrange(-200, 200, m)
y = random.randrange(-155, 155, m)
time.sleep(0.1)
sprite1.setx(x)
sprite1.sety(y)
return x, y
target_x, target_y = settarget(40)
def runprediction(diff_x, diff_y, diff_x1, diff_y1, ang1, ang2):
inputValue=[diff_x, diff_y, diff_x1, diff_y1, ang1, ang2]
#Input Tensor
inputTensor = tf.expand_dims(inputValue, 0)
#Predict
predict = model.predict(inputTensor)
predict_index = np.argmax(predict[0], axis=0)
#Output
predicted_class = class_list[predict_index]
return predicted_class
While True :
if sprite.iskeypressed("up arrow"):
sprite2.move(shark_m)
shark_x=sprite2.x()
shark_y=sprite2.y()
if sprite.iskeypressed("left arrow"):
angles = angle_s - shark_d
sprite2.setdirection(DIRECTION=angles)
if sprite.iskeypressed("right arrow"):
angles = angle_s + shark_d
sprite2.setdirection(DIRECTION=angles)
angle_f=sprite.direction()
angle_s=sprite2.direction()
move = runprediction(curr_x- target_x, curr_y-target_y, shark_x-curr_x, shark_y-curr_y, angle_f, angle_s)
if move == "UP":
sprite.move(fish_m)
curr_x=sprite.x()
curr_y=sprite.y()
if move == "LEFT":
angle = angle_f - fish_d
sprite.setdirection(DIRECTION=angle)
if move == "RIGHT":
angle = angle_f + fish_d
sprite.setdirection(DIRECTION=angle)
if abs(shark_x-curr_x)<20 and abs(shark_y-curr_y)<20:
chance= chance-1
if abs(shark_x-curr_x)<20 and abs(shark_y-curr_y)<20:
chance= chance-1
curr_x, curr_y, target_x, target_y, shark_x, shark_y = settarget1(40)
sprite3.say(("score: ",score ," and chance: ",chance,""))
if (chance == 0):
chance=5
if abs(curr_x-target_x)<20 and abs(curr_y-target_y)<20:
score = score + 1
sprite.say(("your score is: {}".format(score)))
target_x, target_y = settarget(4)
sprite = Sprite('Fish')
sprite1 = Sprite('Orange')
sprite2 = Sprite('Shark 2')
sprite3 = Sprite('Button3')
import random
import time
import numpy as np
import tensorflow as tf
import pandas as pd
import os
import math
#Load Number Model
model= tf.keras.models.load_model(
"num_model.h5",
custom_objects=None,
compile=True,
options=None)
#List of classes
class_list = ['UP','RIGHT','LEFT',]
curr_x = 25
curr_y = 108
shark_x=-177
shark_y=116
score=0
chance=5
fish_d=20
fish_m=35
shark_m=25
shark_d=20
angle_f=90
angle_s=90
sprite3.say(("score: ",score ," and chance: ",chance,""))
sprite.setx(curr_x)
sprite.sety(curr_y)
sprite2.setx(shark_x)
sprite2.sety(shark_y)
sprite.setdirection(DIRECTION=angle_f)
sprite2.setdirection(DIRECTION=angle_s)
def settarget1(t):
x = random.randrange(-200, 200, t)
y = random.randrange(-155, 155, t)
x1 = random.randrange(-200, 200, t)
y1 = random.randrange(-155, 155, t)
x2 = random.randrange(-200, 200, t)
y2 = random.randrange(-155, 155, t)
time.sleep(0.1)
sprite1.setx(x1)
sprite1.sety(y1)
sprite.setx(x)
sprite.sety(y)
sprite2.setx(x2)
sprite2.sety(y2)
return x, y, x1, y1, x2, y2
def settarget(m):
x = random.randrange(-200, 200, m)
y = random.randrange(-155, 155, m)
time.sleep(0.1)
sprite1.setx(x)
sprite1.sety(y)
return x, y
target_x, target_y = settarget(40)
def runprediction(diff_x, diff_y, diff_x1, diff_y1, ang1, ang2):
inputValue=[diff_x, diff_y, diff_x1, diff_y1, ang1, ang2]
#Input Tensor
inputTensor = tf.expand_dims(inputValue, 0)
#Predict
predict = model.predict(inputTensor)
predict_index = np.argmax(predict[0], axis=0)
#Output
predicted_class = class_list[predict_index]
return predicted_class
while True:
if sprite.iskeypressed("up arrow"):
sprite2.move(shark_m)
shark_x=sprite2.x()
shark_y=sprite2.y()
if sprite.iskeypressed("left arrow"):
angles = angle_s - shark_d
sprite2.setdirection(DIRECTION=angles)
if sprite.iskeypressed("right arrow"):
angles = angle_s + shark_d
sprite2.setdirection(DIRECTION=angles)
angle_f=sprite.direction()
angle_s=sprite2.direction()
move = runprediction(curr_x- target_x, curr_y-target_y, shark_x-curr_x, shark_y-curr_y, angle_f, angle_s)
if move == "UP":
sprite.move(fish_m)
curr_x=sprite.x()
curr_y=sprite.y()
if move == "LEFT":
angle = angle_f - fish_d
sprite.setdirection(DIRECTION=angle)
if move == "RIGHT":
angle = angle_f + fish_d
sprite.setdirection(DIRECTION=angle)
if abs(shark_x-curr_x)<20 and abs(shark_y-curr_y)<20:
chance= chance-1
curr_x, curr_y, target_x, target_y, shark_x, shark_y = settarget1(40)
sprite3.say(("score: ",score ," and chance: ",chance,""))
if (chance == 0):
chance=5
if abs(curr_x-target_x)<35 and abs(curr_y-target_y)<35:
score = score + 1
sprite3.say(("score: ",score ," and chance: ",chance,""))
target_x, target_y = settarget(4)
time.sleep(0.2)
Creating a Machine Learning Model of “Shark Attack: Hungry for Fish” game can be both complex and time-consuming. Through the steps demonstrated in this project, you can create your own Machine Learning Model of automated game. Once trained, you can export the model into the Python Coding Environment, where you can tweak it further to give you the desired output. Try creating a Machine Learning Model of your own today and explore the possibilities of Number Classifier in PictoBlox!
Copyright 2024 – Agilo Research Pvt. Ltd. All rights reserved – Terms & Condition | Privacy Policy