Ok so imagine the year is 1973. All the talk is about a new arcade game which has been released by Atari. That game is called Pong.
Now it might not seem much of a game by today's standards, but it was a massive hit in its day... or so I am told.
But don't be deceived, although a simple game, Pong covers a wide range of aspects of computer game programming. There is movement, control, collision detection, scoring, artificial intelligence. Its all in there!
Being able to program Pong is a doorway to being able to program a lot of other games.
However once you start playing Pong you might find less time to program, as it is quite addictive!
We are going to program pong using Python and Pygame.
I will be using Python 2.7. For those programming on a Raspberry Pi this will already be installed. Just ensure you click on the IDLE icon and not the IDLE3 icon. If Python 2.7 is not installed on your system you may have to install it from the Python website, just follow the link below.
Pygame is a basically a set of modules which are designed to help you write computer games. We will be using some of these modules throughout this tutorial. You will need to install Pygame, which is free, and runs on Windows, Linux and Mac OSX (plus many more operating systems!)
If you are programming on a Raspberry Pi, again this is already installed, if not to download Pygame go to the Pygame website.
One final comment before we get into the programming, on the Raspberry Pi desktop there is a Python Games icon. This links you to a website by Al Sweigart who has written several Python books including one on Pygame. If you are new to Python then check out his books.
I cannot rate them highly enough! After several false starts with other books, it was these resources that taught me Python.
Ok that's enough pre-amble, lets get on with it.
I am going to break this game down into stages, which reflect how I developed it. I hope this will show you that when you look at the game as a whole it can seem daunting, but when broken down it is just made up of many easy parts.
So the stages we will follow are:
Stage 1 - Create a blank screen
Stage 2 - Draw the arena, the paddles and the ball
Stage 3 - Move the ball around
Stage 4 - Check for a collision with all edges
Stage 5 - Move the players paddle
Stage 6 - Move the computers paddle with Artificial Intelligence
Stage 7 - Check for a collision with the paddles
Stage 8 - Add a scoring system
Stage 9 - Finally we will look at methods to increase the speed for slower computers
As we go through this tutorial I will provide the whole of the code at the beginning. To help you isolate each stage I will also provide the complete code for that stage as we get to it. I will also tell you where to type each line and include the code you need to type. Where I feel it necessary I will add additional lines in with the code to help you understand where you should type the code. You can always refer to the source code of the complete program or the source code of that stage for further guidance.
First of all, as promised, I will show you the whole code. At this stage don't worry if you don't understand it all. I would suggest having a read through it and seeing what parts you understand and which you don't.
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
#Checks for a collision with a wall, and 'bounces' ball off it.
#Returns new direction
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
#Checks is the ball has hit a paddle, and 'bounces' ball off it.
def checkHitBall(ball, paddle1, paddle2, ballDirX):
if ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
return -1
elif ballDirX == 1 and paddle2.left == ball.right and paddle2.top < ball.top and paddle2.bottom > ball.bottom:
return -1
else: return 1
#Checks to see if a point has been scored returns new score
def checkPointScored(paddle1, ball, score, ballDirX):
#reset points if left wall is hit
if ball.left == LINETHICKNESS:
return 0
#1 point for hitting the ball
elif ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
score += 1
return score
#5 points for beating the other paddle
elif ball.right == WINDOWWIDTH - LINETHICKNESS:
score += 5
return score
#if no points scored, return score unchanged
else: return score
#Artificial Intelligence of computer player
def artificialIntelligence(ball, ballDirX, paddle2):
#If ball is moving away from paddle, center bat
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += 1
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= 1
#if ball moving towards bat, track its movement.
elif ballDirX == 1:
if paddle2.centery < ball.centery:
paddle2.y += 1
else:
paddle2.y -=1
return paddle2
#Displays the current score on the screen
def displayScore(score):
resultSurf = BASICFONT.render('Score = %s' %(score), True, WHITE)
resultRect = resultSurf.get_rect()
resultRect.topleft = (WINDOWWIDTH - 150, 25)
DISPLAYSURF.blit(resultSurf, resultRect)
#Main function
def main():
pygame.init()
global DISPLAYSURF
##Font information
global BASICFONT, BASICFONTSIZE
BASICFONTSIZE = 20
BASICFONT = pygame.font.Font('freesansbold.ttf', BASICFONTSIZE)
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
score = 0
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.mouse.set_visible(0) # make cursor invisible
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# mouse movement commands
elif event.type == MOUSEMOTION:
mousex, mousey = event.pos
paddle1.y = mousey
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
score = checkPointScored(paddle1, ball, score, ballDirX)
ballDirX = ballDirX * checkHitBall(ball, paddle1, paddle2, ballDirX)
paddle2 = artificialIntelligence (ball, ballDirX, paddle2)
displayScore(score)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
Most importantly don't be daunted! All will be revealed throughout this tutorial.
Stage 1 - Create a blank screen
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
#Main function
def main():
pygame.init()
global DISPLAYSURF
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
Ok so where do we start? Well when programming in Pygame I always start with creating a blank screen.
The first thing we need to do is to import the pygame libraries into our program so we have access to them.
We are also importing the sys libraries which we will use later in this section to exit our game.
import pygame, sys
from pygame.locals import *
We will then set a global variable which will control the speed of the program. We do this by varying the number of Frame Per Second or FPS for short. For now we will set this to 200, but can vary this later.
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
Remember any line which starts with a # is not seen by the program when it is running. We use this to allow us to write notes about our code. You will see I do this a lot throughout this program. Comments are very useful when coming back to read your code at a later date.
We also need some global variables for our window size. It is much easier when reading your program at a later date to remember what WINDOWHEIGHT means rather than a value such as 400 spread throughout your program. We will be able to call these variables at any time during our program.
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
Now we get into writing the main function of the program.
As with any function we have to define the function before calling it.
def main():
The next line is needed to initialise pygame.
pygame.init()
Pygame works by drawing onto surfaces. This next line creates the main surface we will use throughout our program. We have made it a global variable so we can access it later. Why did we have to use the word global on this variable and not on the previous variables? Well adding global allows us to modify the value later on. We will be changing our surface, so it's important we can modify it when we need to.
global DISPLAYSURF
The next line relates to the fact we want to set the frame rate ourselves, rather than allowing the program to run as fast as it wants.
FPSCLOCK = pygame.time.Clock()
Now we assign some information to our surface, which sets the display width and height.
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
We set the height and the width to 400 and 300 respectively using the variables we created earlier. Notice how reading WINDOWHEIGHT and WINDOWWIDTH makes it a lot easier to understand what this line means rather than reading 400,300?
Next we set the title of our window. You can put anything you want here, but I am going to call my window 'Pong'
pygame.display.set_caption('Pong')
Now we get into the business end of our program with
while True: #main game loop
This is an eternal loop that will keep running until the game is quit.
The first thing we should do is ensure we can quit! This is achieved during the next four lines of code.
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
For now we are only creating a blank screen so our program is not going to do anything. This will of course change later.
Therefore we can just ask the screen to update.
pygame.display.update()
We need the next line to tell our program to set the Frames Per Second (FPS) rate to use the FPS variable we defined earlier.
FPSCLOCK.tick(FPS)
That is the end of our main function.
There are a couple of lines we need to type in to call our main function.
if __name__=='__main__':
main()
You should now save your game and press F5. Hopefully you see a window similar to this?
Remember to save your work often as you go through the program. It's not much fun typing the same thing in twice!
Stage 2 - Draw the Arena, the paddles and the ball.
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#Main function
def main():
pygame.init()
global DISPLAYSURF
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
Stage 1 was mainly some grunt work to write the bare minimum to get our game to work. The fun starts now. :-)
In stage 2 we will be drawing our arena, the paddles and the ball.
Below the other global variables defining the height and the width we will add a few more variables. Keeping these all grouped together makes it easier to read the code again at a later date.
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
Again it is easier to read our code if we refer to LINETHICKNESS rather than 10 throughout our code.
LINETHICKNESS will be used to determine the thickness of the lines throughout our program.
PADDLESIZE is the length of the paddle.
PADDLEOFFSET is the distance the paddle is from the arena edges.
You can play around with all these variables later and see what happens.
I also know that I will need my screen to have black and white elements.
For ease I have set up some variables for the colours. The three values refer to the amount of Red, Green or Blue (RGB) in the colour.
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
Lets jump back into our main function.
We know that at some point we will expect our ball to move around the screen i.e. that it will move in X and Y. Our paddles however will move up and down i.e only move in Y.
As a starting point we shall place the ball and the paddles in their central position.
We will be defining our ball and paddles using rectangles. These will be defined by stating the top left co-ordinate of each rectangle and then the length and width of each.
Let us create some variables for the ball and each paddle, and assign them values that will position then in their central positions.
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
So if we want to place the ball in the centre, why not use WINDOWWIDTH / 2? Well that would place the top of the ball in the centre of the screen and not the centre of the ball. We need to reduce the position by half the ball size, which is half of the LINETHICKNESS.
You can see we do the same for the paddle positions. This time I have shown the subtraction before dividing the whole value by two.
Now we have our starting co-ordinates, let us create a rectangle for the ball and the paddles.
The format for creating a rectangle is as follows.
pygame.Rect(X co-ordinate, Y co-ordinate, Width of Rectangle, Length of Rectangle)
As we have just defined all this information we can easily create the three rectangles,
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
For paddle 1 we use an X co-ordinate of PADDLEOFFSET which is defining the distance from the left hand side. Paddle 2 needs a little more work as this is on the right hand side.
The X co-ordinate for paddle 2 needs to be the width of the window (WINDOWWIDTH) minus the paddle offset (PADDLEOFFSET). However this would take us to the right hand side of the paddle, so we also need to minus off the thickness of the paddle (LINETHICKNESS). Therefore the X co-ordinate of paddle 2 would be WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS
While we have defined the starting positions, and then the required rectangles, we have not actually drawn anything yet. To make it easier lets create a separate function to draw the arena, the two paddles and the ball.
The code to call these functions is positioned directly below the rectangles we have created, and will set up our starting screen.
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
You will see that for the two players and the ball we pass the appropriate rectangle into the function, for the arena we don't pass anything into that function. The reason is as we move the paddles and the ball we will be updating the rectangle position to reflect the new position of these items. The arena remains the same throughout the game so the arena function will always draw the same thing regardless of where the ball and the paddles are.
As the game progresses we will be moving the ball and the paddles around, so we should update the screen every tick or FPS.
To do this we will call the same functions but this time within our while loop. This will ensure our game is updated so many times per second to match out FPS rate.
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
Ok, we should now write these four functions.
Starting with drawArena()
Directly below where we defined the two colours type the following function. I will show you the whole function, then we will look at it line by line.
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
The first line defines the function name, and the fact the brackets are empty shows we are passing nothing into the function.
Firstly we fill the screen background so it is all white.
DISPLAYSURF.fill((0,0,0))
Now we want to draw a border all around the arena. We can do this as a rectangle, but rather than filling the rectangle as we did with the paddles and the ball we will make it hollow. This requires us to add an extra parameter which defines the thickness of the line.
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
Let us analyse this line a little more.
The DISPLAYSURF tells the program which surface we want to draw onto. In our case we will use DISPLAYSURF.
WHITE tells us what colour the rectangle should be.
((0,0),(WINDOWWIDTH,WINDOWHEIGHT)) defines a rectangle. (0,0) are the (left, top) co-ordinates, and (WINDOWWIDTH,WINDOWHEIGHT) are the width and height of the rectangle. Notice these are all within a set of brackets.
Now we need to define the thickness of the line. Why have we used LINETHICKNESS * 2? Well our rectangle is around the edge of our window, and when we give it a thickness, half the line thickness is on the inside of the rectangle and half on the outside. Doubling the thickness means there is a total line of LINETHICKNESS on the inside of the rectangle, which you will see and an equal amount on the outside which you cannot see.
Any good court should have a centre line, so we will draw one in our arena.
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
This is very similar syntax to the rectangle but ((WINDOWWIDTH/2),0) are the starting (x,y) co-ordinates of the line and ((WINDOWWIDTH/2),WINDOWHEIGHT) are the end co-ordinates.
We only want this to be a thin line so we use LINETHICKNESS / 4 to indicate its width.
There we go that is all that is needed to draw the arena, so lets move swiftly onwards.
We will create a function to draw the paddle. Now as we know we will want to draw a paddle for Paddle1 and Paddle2, we should be able to use the same function for both.
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
Again the first line defines the function name and tells us we are accepting paddle as a parameter into the function. Now when we called the function earlier, one time we passed paddle1 into the function, and the second time paddle2. Well to help re-use code whatever we pass into this function will be called paddle. This means we can pass both paddle1 and paddle2 into it and it will refer to them as just paddle. This saves us having to write the same function twice, once for paddle1 and once for paddle2.
Now I want to make sure that the paddle will stay within the arena. If it tries to move out of the bottom of the arena we limit it to its lowest point, then do something similar at the top.
As paddle is a rectangle we can isolate the values that make up the rectangle, such as x and y. However pygame gives us more control than that so we can access the top, the bottom, left or right of the rectangle. In fact there are loads of options all listed on the pygame.rect page. If you would like to explore these yourself have a look at this link.
To ensure the paddle doesn't move off the bottom of the arena, it is easier if we look at the bottom of the paddle. This is done with paddle.bottom.
We don't want our paddle bottom to move beyond the arena walls. The bottom arena wall is the height of the window minus the thickness of the wall. Our code therefore looks like this.
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
We simply say if it moves too far, make it equal to the furthest point we want it to go to.
The same is done to stop it moving too high. However this time we look at the top of the paddle using paddle.top
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
Now we draw our rectangle
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
This is exactly the same as when we drew the rectangle for the arena. However instead of defining the rectangle inside the brackets, we use our predefined rectangle - paddle. Nice and easy.
Finally we will write the function to draw the ball.
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
We name the function drawBall and show it will accept ball.
Then as we have done with the paddles we simply draw the ball. Very simple.
Saving and running your program should show the arena with 2 paddles and a ball.
Stage 3 - Move the ball around.
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
#Main function
def main():
pygame.init()
global DISPLAYSURF
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
While we can see our game is taking shape, there is not much actually happening. We will change this now by moving the ball around. First lets determine which way the ball is moving.
My method of doing this is to create two variables. One for the direction of the ball in X, and one in Y. This allows us to control the ball in each axis independently. Lets create these variables below our initial ball and player positions.
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
Lets say if the ball is moving left, we will make ballDirX = -1, and if it is moving right we will make it 1
Similarly if it is moving up we will make ballDirY = -1 and down ballDirY = 1.
Every FPS we will want to move the ball. Therefore we will write a function which will move the ball by updating the co-ordinates stored in the ball rectangle. We will need to pass into the function the value for ball, and the X and Y directions, ballDirX and ballDirY. Under where we called the drawBall() function in our main loop add the following line to call the moveBall function.
ball = moveBall(ball, ballDirX, ballDirY)
Whatever is output from our moveBall function will become the new value of ball.
Outside the main loop with the other functions lets create the function moveBall below the drawBall function.
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
After naming the function listing the parameters being passed into it we simply add to the x value of ball the value from ballDirX.
ball.x += ballDirX
If you are confused about the meaning of += remember a += b is equal to a = a + b.
This means if the ball should be moving left, we add -1 onto the co-ordinates of the ball, which moves the ball left. If ballDirX is 1, ball.x would increase by 1, moving it to the right.
We then do a similar thing for ball.y
ball.y += ballDirY
Finally we return the modified ball back into our main function.
return ball
Time to save your file and test out step 3 moving the ball.
Step 4 - Check collision with all edges
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
#Checks for a collision with a wall, and 'bounces' ball off it.
#Returns new direction
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
#Main function
def main():
pygame.init()
global DISPLAYSURF
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
So how is that moving the ball function working out for you? Well the ball certainly moves, but it disappears off the side of the arena, and keeps going!
How will we deal with this? Well, if the ball hits one of the edges, we need to reverse the direction it is travelling in. If it hits the top or bottom edge we should reverse the ballDirY, and if it hits the left or right edge we should reverse ballDirX. We will do this in a function, but before that in our main game loop lets add a call to that function. So below ball = moveBall(ball, ballDirX, ballDirY) add the following line.
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
So we are calling a function checkEdgeCollision. The function will need to know the ball position and the current direction in X and Y, therefore we pass those parameters into the function.
Any collision will need to change ballDirX and ballDirY, so the output of the function will modify these as required.
OK time to write the function.
Outside of the main function underneath the moveBall function we will write our function called checkEdgeCollision
#Checks for a collision with a wall, and 'bounces' ball off it.
#Returns new direction
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
So after naming the function we check to see if the top of the ball has hit the top of the arena, or the bottom of the ball has hit the bottom of the arena.
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
If that is the case we multiply our Y direction by -1.
For those whose mathematics is not great,
1 x -1 = -1
-1 x -1 = 1
Therefore if the direction was negative, it becomes positive and vice versa.
We do the same thing for the left and right of the ball.
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
and finally we return the X and Y directions, as our code is expecting us to.
return ballDirX, ballDirY
Wow that edge detection function was pretty easy huh?
Again save and test your code. Do you see a ball bouncing around the screen?
Stage 5 - Move the players paddle.
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
#Checks for a collision with a wall, and 'bounces' ball off it.
#Returns new direction
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
#Main function
def main():
pygame.init()
global DISPLAYSURF
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.mouse.set_visible(0) # make cursor invisible
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# mouse movement commands
elif event.type == MOUSEMOTION:
mousex, mousey = event.pos
paddle1.y = mousey
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
While it is nice to see the ball moving so well, its a little frustrating we cannot hit it! I am sure we can resolve that fairly easily.
Earlier on we created an event.type which was equal to quit. Well there are a few event types in Python and one of those is checking the motion of the mouse.
Underneath sys.exit() which is the previous event type you programmed type the following.
# mouse movement commands
elif event.type == MOUSEMOTION:
mousex, mousey = event.pos
paddle1.y = mousey
The first event checked for a QUIT and then exited the game. This was held within an 'if' statement. The second part you have just typed is an 'elif' statement which is checked if the 'if' statement was not true.
elif event.type == MOUSEMOTION:
Else if (elif) the event type is mouse motion
mousex, mousey = event.pos
This gives the X and Y co-ordinates of the mouse position. Our game is not really interested in the X position, only the Y. We can therefore make the y position of paddle1 equal to the mousey position.
paddle1.y = mousey
Wow, Pygame really makes these things easy doesn't it?
If you run your game you will see you have control over your paddle. However the fact you can see the mouse cursor is a little annoying, so lets turn that off.
Just before your while True: loop in the main function type the following.
pygame.mouse.set_visible(0) # make cursor invisible
This means you cannot see the cursor in your game.
Again run your game and see if that has made it better.
Stage 6 - Move the computers paddle with 'Artificial Intelligence'
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
#Checks for a collision with a wall, and 'bounces' ball off it.
#Returns new direction
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
#Artificial Intelligence of computer player
def artificialIntelligence(ball, ballDirX, paddle2):
#If ball is moving away from paddle, center bat
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += 1
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= 1
#if ball moving towards bat, track its movement.
elif ballDirX == 1:
if paddle2.centery < ball.centery:
paddle2.y += 1
else:
paddle2.y -=1
return paddle2
#Main function
def main():
pygame.init()
global DISPLAYSURF
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.mouse.set_visible(0) # make cursor invisible
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# mouse movement commands
elif event.type == MOUSEMOTION:
mousex, mousey = event.pos
paddle1.y = mousey
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
paddle2 = artificialIntelligence (ball, ballDirX, paddle2)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
While being able to move your paddle is all very good, it's not much fun if the computer doesn't move his paddle. Before allowing you to hit the ball lets add some 'artificial intelligence' into the computer.
The computer is not really thinking for itself, so we are not programming Artificial Intelligence in the true sense of the word. It is just following a predetermined set of instructions.
You can think of your own method of this if you like later. I am going to make the computer player play similar to how I play squash.
- Once I have hit the ball I move to the centre of the court.
- When my opponent has hit the ball I start to follow the ball so I can hit it back.
Again we will do all the hard work in a function.
That function will need to know:
The position of the ball so it can follow it.
The direction of the ball so it knows if it is moving away or towards the computers paddle.
The position of the paddle so it can adjust its position depending on what the ball is doing.
The output will be the position of the paddle.
Therefore in our main loop lets create a call to a function called artificialIntelligence to suit our requirements.
paddle2 = artificialIntelligence (ball, ballDirX, paddle2)
Here is the function in its entirety. Have a read through and we will break it down in more detail.
#Artificial Intelligence of computer player
def artificialIntelligence(ball, ballDirX, paddle2):
#If ball is moving away from paddle, center bat
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += 1
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= 1
#if ball moving towards bat, track its movement.
elif ballDirX == 1:
if paddle2.centery < ball.centery:
paddle2.y += 1
else:
paddle2.y -=1
return paddle2
After naming the function with the correct parameters being passed into it we check to see if the ball is moving away from the paddle.
if ballDirX == -1:
If it is we do one of two things.
If the center of the paddle in y is higher (remember the top of the screen is position 0) than the center of the screen, we move the paddle down by one.
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += 1
Notice we use another of the great options when working with rectangles to find the center of the rectangle in y by using paddle2.centery
If it is lower, we move it up by one.
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= 1
We have used less than and greater than. This means if the centery is equal to the WINDOWHEIGHT/2 it wont try to move and will sit stable in the central position.
That covers if the ball is moving away from the bat. If it is moving towards the bat we said we would move the bat towards the ball.
We first define the elif part of the loop to check if the ball is moving towards the paddle.
#if ball moving towards bat, track its movement.
elif ballDirX == 1:
In a similar manner to when the ball was moving away from the paddle we check to see the position of the paddle this time with respect to the ball. If it is higher than the ball we increase the paddle Y co-ordinate.
if paddle2.centery < ball.centery:
paddle2.y += 1
Else, it must be lower so we decrease the paddle Y co-ordinate.
else:
paddle2.y -=1
Finally we return paddle2.
return paddle2
Right time to save and test your program.
Stage 7 - Collision with the paddle
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
#Checks for a collision with a wall, and 'bounces' ball off it.
#Returns new direction
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
#Checks is the ball has hit a paddle, and 'bounces' ball off it.
def checkHitBall(ball, paddle1, paddle2, ballDirX):
if ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
return -1
elif ballDirX == 1 and paddle2.left == ball.right and paddle2.top < ball.top and paddle2.bottom > ball.bottom:
return -1
else: return 1
#Artificial Intelligence of computer player
def artificialIntelligence(ball, ballDirX, paddle2):
#If ball is moving away from paddle, center bat
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += 1
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= 1
#if ball moving towards bat, track its movement.
elif ballDirX == 1:
if paddle2.centery < ball.y:
paddle2.y += 1
else:
paddle2.y -=1
return paddle2
#Main function
def main():
pygame.init()
global DISPLAYSURF
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.mouse.set_visible(0) # make cursor invisible
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# mouse movement commands
elif event.type == MOUSEMOTION:
mousex, mousey = event.pos
paddle1.y = mousey
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
ballDirX = ballDirX * checkHitBall(ball, paddle1, paddle2, ballDirX)
paddle2 = artificialIntelligence (ball, ballDirX, paddle2)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
You should now have your paddle moving around the screen nicely using the mouse and the computers paddle moving using its artificial intelligence.
However we have not programmed the software to allow the ball to collide with the paddles, so let us do that now.
As always lets call the function in our main loop to ensure it is checked every-time the FPS ticks over.
ballDirX = ballDirX * checkHitBall(ball, paddle1, paddle2, ballDirX)
We know that when the ball hits the paddle we will want to reverse the direction the ball is moving in in X.
If we make our function checkHitBall return a -1 if the ball is hit, and a 1 if it is not, then by multiplying this returned value by the value in ballDirX will give us the new ballDirX. This is similar to how we reversed the direction if the ball hit one of the sides.
So below our checkEdgeCollision function lets add a checkHitBall function.
#Checks is the ball has hit a paddle, and 'bounces' ball off it.
def checkHitBall(ball, paddle1, paddle2, ballDirX):
if ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
return -1
elif ballDirX == 1 and paddle2.left == ball.right and paddle2.top < ball.top and paddle2.bottom > ball.bottom:
return -1
else: return 1
As this function checks if the ball has hit either paddle, we pass both paddles and the ball into the function.
def checkHitBall(ball, paddle1, paddle2, ballDirX):
Now the fun bit of seeing if the ball has hit the paddle. Pygame has a few ways of doing this such as checking to see if one rectangle has intersected another. I want to make sure my ball can only be hit from the front and not the back
if ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
This line checks four things to see if the ball has been hit.
The first things it checks the direction of the ball. We only want to ball to be classed as being hit if it is hits the paddle from the front. If it is hit from the rear it means you have missed the ball, so we will make the ball pass through the paddle until it is back in play.
The next three things it checks are to see the position of the ball relative to the paddle. It checks if the right hand side of the paddle hits the left hand side of the ball AND that the top of the ball is lower than the top of the paddle AND the bottom of the ball is higher than the bottom of the paddle.
If these three AND statements are true, then the paddle has hit the ball so we return a -1 to flip the direction.
return -1
We now do something very similar but for the computer paddle which is paddle 2. Notice we want the ball to be moving in a different direction and the right hand side of the ball will hit the left side of the paddle.
elif ballDirX == 1 and paddle2.left == ball.right and paddle2.top < ball.top and paddle2.bottom > ball.bottom:
return -1
Finally if nothing has been hit we should return a 1 so the direction of the ball doesn't change.
else: return 1
Step 8 - Add a scoring system
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 200
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += ballDirX
ball.y += ballDirY
return ball
#Checks for a collision with a wall, and 'bounces' ball off it.
#Returns new direction
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
#Checks is the ball has hit a paddle, and 'bounces' ball off it.
def checkHitBall(ball, paddle1, paddle2, ballDirX):
if ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
return -1
elif ballDirX == 1 and paddle2.left == ball.right and paddle2.top < ball.top and paddle2.bottom > ball.bottom:
return -1
else: return 1
#Checks to see if a point has been scored returns new score
def checkPointScored(paddle1, ball, score, ballDirX):
#reset points if left wall is hit
if ball.left == LINETHICKNESS:
return 0
#1 point for hitting the ball
elif ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
score += 1
return score
#5 points for beating the other paddle
elif ball.right == WINDOWWIDTH - LINETHICKNESS:
score += 5
return score
#if no points scored, return score unchanged
else: return score
#Artificial Intelligence of computer player
def artificialIntelligence(ball, ballDirX, paddle2):
#If ball is moving away from paddle, center bat
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += 1
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= 1
#if ball moving towards bat, track its movement.
elif ballDirX == 1:
if paddle2.centery < ball.centery:
paddle2.y += 1
else:
paddle2.y -=1
return paddle2
#Displays the current score on the screen
def displayScore(score):
resultSurf = BASICFONT.render('Score = %s' %(score), True, WHITE)
resultRect = resultSurf.get_rect()
resultRect.topleft = (WINDOWWIDTH - 150, 25)
DISPLAYSURF.blit(resultSurf, resultRect)
#Main function
def main():
pygame.init()
global DISPLAYSURF
##Font information
global BASICFONT, BASICFONTSIZE
BASICFONTSIZE = 20
BASICFONT = pygame.font.Font('freesansbold.ttf', BASICFONTSIZE)
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
score = 0
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.mouse.set_visible(0) # make cursor invisible
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# mouse movement commands
elif event.type == MOUSEMOTION:
mousex, mousey = event.pos
paddle1.y = mousey
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
score = checkPointScored(paddle1, ball, score, ballDirX)
ballDirX = ballDirX * checkHitBall(ball, paddle1, paddle2, ballDirX)
paddle2 = artificialIntelligence (ball, ballDirX, paddle2)
displayScore(score)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
Right we should have the majority of our game written, so how about adding a display of the score?
We will do this in two parts. First we will update the score and then we will display the score.
Before we write our function to update the score lets call that function in our main program.
We only want the score to change if the ball has hit the paddle while moving in a certain direction. Therefore we need to call the function to check the score before we update the ball direction once it has been hit.
Add this line in the main function before you check the ball is hit, but after you have checked edge collision.
score = checkPointScored(paddle1, ball, score, ballDirX)
This line updates the variable score with whatever is returned from the checkPointScored function. What have we forgotten? We need to initiate the variable 'score' as we have with the other variables.
So underneath the line
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
add
Score = 0
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
score = 0
Now we can write our function which will check if any points have been scored and update the score to reflect this.
Our checkPointScored function takes the position of paddle 1, the position of the ball, the current score and the direction of the ball to help determine if a point has been scored.
You can decide how and when points are scored if you want to. My function gives 5 points for beating the computers paddle and one point for hitting the ball. If your paddle is beaten, then your points are reset to 0.
The whole of the function looks as follows.
#Checks to see if a point has been scored returns new score
def checkPointScored(paddle1, ball, score, ballDirX):
#reset points if left wall is hit
if ball.left == LINETHICKNESS:
return 0
#1 point for hitting the ball
elif ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
score += 1
return score
#5 points for beating the other paddle
elif ball.right == WINDOWWIDTH - LINETHICKNESS:
score += 5
return score
#if no points scored, return score unchanged
else: return score
As always we define the name of the function and the parameters being passed into it.
def checkPointScored(paddle1, ball, score, ballDirX):
We then check to see if the players paddle has been beaten.
#reset points if left wall is hit
if ball.left == LINETHICKNESS:
return 0
If the ball makes it to the left hand side of the arena, we return 0 i.e. reset the score to 0.
Now we look to see if your paddle has been hit. We use the same check we carried out to see if we had hit the ball. We then increase the score by one and return it.
#1 point for hitting the ball
elif ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
score += 1
return score
Now we see if the computer paddle has been beaten. This is very similar to seeing if your own paddle has been passed by the ball. This time we check the right hand side of the ball and the right hand edge of the arena.
#5 points for beating the other paddle
elif ball.right == WINDOWWIDTH - LINETHICKNESS:
score += 5
return score
If this happens we add 5 onto the score and return that.
If nothing has happened to cause the score to change we return the score unaffected.
#if no points scored, return score unchanged
else: return score
That was all very straight forward wasn't it?
Now we have worked out what our score should be, we need to display the score.
In our main function we will call a function to display the score.
displayScore(score)
Before we write the function we will have to create some information about the font we want to use to display the score.
Underneath global DISPLAYNAME at the top of our main function add the following.
##Font information
global BASICFONT, BASICFONTSIZE
BASICFONTSIZE = 20
BASICFONT = pygame.font.Font('freesansbold.ttf', BASICFONTSIZE)
This creates a global variable called BASICFONT and another called BASICFONTSIZE.
We then set BASICFONTSIZE to 20
BASICFONTSIZE = 20
and set the font to freesansbold
BASICFONT = pygame.font.Font('freesansbold.ttf', BASICFONTSIZE)
Now we can write the function which displays the score.
#Displays the current score on the screen
def displayScore(score):
resultSurf = BASICFONT.render('Score = %s' %(score), True, WHITE)
resultRect = resultSurf.get_rect()
resultRect.topleft = (WINDOWWIDTH - 150, 25)
DISPLAYSURF.blit(resultSurf, resultRect)
The first line creates a new surface called resultSurf.
resultSurf = BASICFONT.render('Score = %s' %(score), True, WHITE)
It then takes the information from BASICFONT and renders it with the following information defined within the brackets.
'Score = %s' %(score)
This explains the text to be displayed. It will say 'Score = %s' where %s is replaced by whatever follows the %. In our case the value stored in the variable score.
Therefore if the score was 4 we would see.
Score = 4
True refers to the fact we want anti-aliasing turned on. I will not go into the technical details of how this achieves its results, as it is beyond the scope of this tutorial. If you are curious then replace True with False and look at how blocky the font looks!
WHITE defines the colour and uses the information we stored in the global variable when we defined the WHITE and BLACK earlier in our program.
The next line
resultRect = resultSurf.get_rect()
This creates a new rectangle called resultRect which is the same size as the surface we created on the previous line. It uses a built in function of pygame called get_rect().
Next we position the new rectangle
resultRect.topleft = (WINDOWWIDTH - 150, 25)
This places the text 'WINDOWWIDTH - 150' in X which is 150 pixels from the right hand side of the screen, and 25 pixels from the top in Y.
Finally we display the surface with
DISPLAYSURF.blit(resultSurf, resultRect)
which uses blit to update just the part of the screen specified by resultRect, which we have just created to match the size of our surface.
There we go, you should have a fully working game of pong.
Stage 9 - Speed Optimisation
import pygame, sys
from pygame.locals import *
# Number of frames per second
# Change this value to speed up or slow down your game
FPS = 40
INCREASESPEED = 5
#Global Variables to be used through our program
WINDOWWIDTH = 400
WINDOWHEIGHT = 300
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
# Set up the colours
BLACK = (0 ,0 ,0 )
WHITE = (255,255,255)
#Draws the arena the game will be played in.
def drawArena():
DISPLAYSURF.fill((0,0,0))
#Draw outline of arena
pygame.draw.rect(DISPLAYSURF, WHITE, ((0,0),(WINDOWWIDTH,WINDOWHEIGHT)), LINETHICKNESS*2)
#Draw centre line
pygame.draw.line(DISPLAYSURF, WHITE, ((WINDOWWIDTH/2),0),((WINDOWWIDTH/2),WINDOWHEIGHT), (LINETHICKNESS/4))
#Draws the paddle
def drawPaddle(paddle):
#Stops paddle moving too low
if paddle.bottom > WINDOWHEIGHT - LINETHICKNESS:
paddle.bottom = WINDOWHEIGHT - LINETHICKNESS
#Stops paddle moving too high
elif paddle.top < LINETHICKNESS:
paddle.top = LINETHICKNESS
#Draws paddle
pygame.draw.rect(DISPLAYSURF, WHITE, paddle)
#draws the ball
def drawBall(ball):
pygame.draw.rect(DISPLAYSURF, WHITE, ball)
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += (ballDirX * INCREASESPEED)
ball.y += (ballDirY * INCREASESPEED)
return ball
#Checks for a collision with a wall, and 'bounces' ball off it.
#Returns new direction
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS) or ball.bottom == (WINDOWHEIGHT - LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS) or ball.right == (WINDOWWIDTH - LINETHICKNESS):
ballDirX = ballDirX * -1
return ballDirX, ballDirY
#Checks is the ball has hit a paddle, and 'bounces' ball off it.
def checkHitBall(ball, paddle1, paddle2, ballDirX):
if ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
return -1
elif ballDirX == 1 and paddle2.left == ball.right and paddle2.top < ball.top and paddle2.bottom > ball.bottom:
return -1
else: return 1
#Checks to see if a point has been scored returns new score
def checkPointScored(paddle1, ball, score, ballDirX):
#reset points if left wall is hit
if ball.left == LINETHICKNESS:
return 0
#1 point for hitting the ball
elif ballDirX == -1 and paddle1.right == ball.left and paddle1.top < ball.top and paddle1.bottom > ball.bottom:
score += 1
return score
#5 points for beating the other paddle
elif ball.right == WINDOWWIDTH - LINETHICKNESS:
score += 5
return score
#if no points scored, return score unchanged
else: return score
#Artificial Intelligence of computer player
def artificialIntelligence(ball, ballDirX, paddle2):
#If ball is moving away from paddle, center bat
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += INCREASESPEED
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= INCREASESPEED
#if ball moving towards bat, track its movement.
elif ballDirX == 1:
if paddle2.centery < ball.centery:
paddle2.y += INCREASESPEED
else:
paddle2.y -= INCREASESPEED
return paddle2
#Displays the current score on the screen
def displayScore(score):
resultSurf = BASICFONT.render('Score = %s' %(score), True, WHITE)
resultRect = resultSurf.get_rect()
resultRect.topleft = (WINDOWWIDTH - 150, 25)
DISPLAYSURF.blit(resultSurf, resultRect)
#Main function
def main():
pygame.init()
global DISPLAYSURF
##Font information
global BASICFONT, BASICFONTSIZE
BASICFONTSIZE = 20
BASICFONT = pygame.font.Font('freesansbold.ttf', BASICFONTSIZE)
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption('Pong')
#Initiate variable and set starting positions
#any future changes made within rectangles
ballX = WINDOWWIDTH/2 - LINETHICKNESS/2
ballY = WINDOWHEIGHT/2 - LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGHT - PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGHT - PADDLESIZE) /2
score = 0
#Keeps track of ball direction
ballDirX = -1 ## -1 = left 1 = right
ballDirY = -1 ## -1 = up 1 = down
#Creates Rectangles for ball and paddles.
paddle1 = pygame.Rect(PADDLEOFFSET,playerOnePosition, LINETHICKNESS,PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH - PADDLEOFFSET - LINETHICKNESS, playerTwoPosition, LINETHICKNESS,PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS)
#Draws the starting position of the Arena
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.mouse.set_visible(0) # make cursor invisible
while True: #main game loop
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
# mouse movement commands
elif event.type == MOUSEMOTION:
mousex, mousey = event.pos
paddle1.y = mousey
drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
score = checkPointScored(paddle1, ball, score, ballDirX)
ballDirX = ballDirX * checkHitBall(ball, paddle1, paddle2, ballDirX)
paddle2 = artificialIntelligence (ball, ballDirX, paddle2)
#displayScore(score)
pygame.display.update()
FPSCLOCK.tick(FPS)
if __name__=='__main__':
main()
So we now have a fully working game of PONG. What do you feel about the speed of the game. For me it runs very well on my PC, a little slow on my Mac and very slow on my Raspberry Pi. Some of you will be able to tweak the value set in FPS to slow down or speed up the game. However if your system is running flat out what can you do to speed it up?
The main reason the game slows down is because it struggles to refresh the screen at the desired FPS. Quite a common problem in Pygame.
There are a few options to help improve the situation. You can do one or all of the following.
Increase movement per frame.
Well at the moment you are moving the ball only one pixel per frame. We can increase this.
Under the line where you defined the FPS add the following line.
INCREASESPEED = 5
Now when you move the ball in the moveBall function instead of increasing its location by one, increase it by 5 using the following.
#moves the ball returns new position
def moveBall(ball, ballDirX, ballDirY):
ball.x += (ballDirX * INCREASESPEED)
ball.y += (ballDirY * INCREASESPEED)
return ball
To ensure the computers paddle is not massively slow in relation to this you should also make a similar change in the artificialIntelligence function.
#Artificial Intelligence of computer player
def artificialIntelligence(ball, ballDirX, paddle2):
#If ball is moving away from paddle, center bat
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGHT/2):
paddle2.y += INCREASESPEED
elif paddle2.centery > (WINDOWHEIGHT/2):
paddle2.y -= INCREASESPEED
#if ball moving towards bat, track its movement.
elif ballDirX == 1:
if paddle2.centery < ball.centery:
paddle2.y += INCREASESPEED
else:
paddle2.y -= INCREASESPEED
return paddle2
Instead of increasing the paddle position by a value of 1 it increases it by the value stored in INCREASESPEED.
There is a warning with this method of increasing the speed. While the value 5 works in this case, increasing the value of INCREASESPEED may mean the paddles do not recognise when the ball is hit or the ball does not bounce off the side of the arena. The ball jumps by 5 pixels, which is ok. If it jumps by 10 or 20 it may not detect collision with the wall or paddle and will appear to pass through them.
Another option is simply don't display the score!
One thing which slows the game down more than anything is the displaying of the score. So to stop this slowing down the game, don't display the score!
Place a hash tag in front of the line displayScore(score) and this will stop the screen updating the score.
#displayScore(score)
I hope you have enjoyed writing this game of pong as much as I did. Hopefully you have learned a few new Pygame tools to aid you with programming your own games!
Update
Since writing this blog post Nat over at
Webucator has turned this blog post into an excellent video tutorial which refactors the code using OOP. Its definitely worth having a look at the video they have created, which I discuss in a later blog post.
Further Update
The wonderful MagPi magazine have used this blog post as the basis of one of their tutorials. Check it out in Issue 53 of the MagPi (Page 26/27).
every code i typed in on the program you offered came up with an error
ReplyDeletenice
Deletewhy dont u use ur brain and do the whole thing urself
Deleteno one cares
ReplyDeleteHi - thanks for the tutorial. I ended up with paddles that allow the ball to pass through on their edges - is this expected behavior?
ReplyDeleteedit - on further inspection, it seems like the paddle's visual representation on the screen is not synched up with hit detection. Sometimes it will pass right through the middle if I rush the paddle over to the ball in a split second.
DeleteGreat Article
ReplyDeleteB.Tech Final Year Projects for CSE in Python
FInal Year Project Centers in Chennai
Python Training in Chennai
Python Training in Chennai
Thanks for sharing, nice post! Post really provice useful information!
ReplyDeleteGiaonhan247 chuyên dịch vụ vận chuyển hàng đi mỹ cũng như dịch vụ ship hàng mỹ từ dịch vụ nhận mua hộ hàng mỹ từ website nổi tiếng Mỹ là mua hàng amazon về VN uy tín, giá rẻ.
Nice post, I also made a simple tutorial on building a pong game in python. Feel free to check it out. https://conditionalcoder.blogspot.com/2019/07/tutorial-programming-pong-in-python.html
ReplyDeleteHiiii....Thanks for sharing Great information...Nice post...Keep move on....
ReplyDeletePython Training in Hyderabad
I really enjoyed your blog Thanks for sharing such an informative post.
ReplyDeletehttps://myseokhazana.com/
https://seosagar.in/
Indian Bookmarking list
Indian Bookmarking list
India Classified Submission List
Indian Classified List
Indian Bookmarking list
Indian Bookmarking list
India Classified Submission List
Indian Classified List
Thanks for provide great informatic and looking beautiful blog, really nice required information & the things i never imagined and i would request, wright more blog and blog post like that for us. Thanks you once agianMarriage certificate in delhi
ReplyDeleteMarriage certificate in ghaziabad
Marriage registration in gurgaon
Marriage registration in noida
special marriage act
Marriage certificate online
Marriage certificate in mumbai
Marriage certificate in faridabad
Marriage certificate in bangalore
Marriage certificate in hyderabad thanks once again to all.
Enjoyed reading the article above, really explains everything in detail, the article is very interesting and effective. Thank you and good luck for the upcoming articles Python course
ReplyDeleteI like your post very much. It is very much useful for my research. I hope you to share more info about this. Keep posting ai online training hyderabad
ReplyDelete
ReplyDeleteBuy Vyvanse Online
Buy Oxycodone online
Buy Oxycontin online
Buy suboxone online
Buy Macaw Parrots Online
Macaw Parrots For Sale
Welcome to Official Macaw Parrots For Sale Farm. After talking to breeders and vet and trying to get experience with birds in real life are both good, just note that a vet is going to give you waaay more unbiased info while you will need to be on your guard for a breeder just trying to make a sale. Like pet stores, some will not hesitate to up-sell all of the fantastic qualities of their little baby macaw, showing you how cuddly it is, how quiet, and not mentioning how puberty will most likely completely change their personalities. Macaw Parrots for Sale.
Macaws For Sale
Macaw parrots farm
Buy Marijuana Online
Weed For Sale
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoid
Mail Order Marijuana
Order weed Online USA
Goldendoodle Puppies For Sale
Adopt a Golden Doodle Puppy
The Goldendoodle is a cross-breed dog, obtained by breeding a Golden Retriever with a Poodle. The name, which alters "poodle" to "doodle" by analogy to "Labradoodle", another poodle cross, was coined in 1992.
Golden Doodle Pupies for sale near me
Golden doodle Puppies USA
Tavor 7 For Sale
Buy Tavor Online
Tavor 7 For Sale. The TAVOR 7 is a fully ambidextrous platform on which the ejection side and the charging handle can be switched quickly and easily from side ...
Firearms For sale
Tavor 7 for sale USA
Buy Dank Vapes Carts Full Gram
Dank Vapes for sale
Dank Vapes
Dank Carts for sale online
Buy Space Monkey Meds Online
Buy Weed Tins Online
Buy Space Monkey Meds Online - Buy Weed Tins Online Our weed tins stands unique in quality and purity. Our mail order marijuana services stand apart in stealth and discretion. Place an order to buy weed tins online with us today and benefit from our amazing prices and coupon codes. Ordering space monkey meds for sale online can be a challenging task to newbies. Here at Weed tins Shop, we provide weed tins for sale with easy purchasing and checkout procedures.
Buy Runtz Strain Online
Runtz OG
buy Dank vapes USA
ReplyDeletebuy Dank vapes Europe
buy Dank vapes ASIA
buy Dank vapes India
buy Dank vapes UK
buy Dank vapes South America
buy dank vapes carts online
buy Dankwoods online
chronopoly carts review
buy Dank vapes cartridges
buy chronopoly carts flavors
buy organic smart carts
buy marijaunna edibles
buy Stiiizy flavors
order Stiiizy for sale
how to make edibles
buy stiiizy cartridges
dankwoods for sale
chronopoly carts
buy cbd oil
buy stiiizy cartridges battery
buy incredible edibles
buy 710 kingpen
710 king pen vape pen
kingpen cartridges
order Cbd edibles
Dabwoods review
buy gorilla glue exotic carts
buy mango kush dank vapes
Dank vapes flavors
Dank vapes official account website
Dabwoods carts
brass knuckles carts
buy brass knuckles flavors
buy brass knuckles vape
buy Pills USA
ReplyDeletebuy ibogaine HCl for sale
buy MDMA Pills online
buy changa dmt online
buy morning glory seeds
buy iboga
buy Ayahuasca
buy mescaline
buy Penis envy
buy Penis envy mushrooms for sale
buy Golden teacher mushrooms for sale
mescaline drugs for sale
buy liberty cap mushrooms
buy ibogaine
buy liquid lsd
what is dmt
what is lsd
buy albino penis envy
what is penis envy
kratom near me
buy kratom powder
buy kratom capsules
order mushrooms online
Buy Pills online
buy dmt drug online
buy real dank apes online
ReplyDeletebuy 1gram dank apes online
buy dankvapes
possible purpose british amount distribution soldiers although create capital dry
ReplyDeletemorning glory seeds
pcp drug
buy ibogaine
ectasy molly
ketamine drug
buy psilocybin mushrooms online
buy liberty caps online
buy dmt
buy lsd
buy lsd online
thc gummies
ReplyDeletebuy vapes online
buy concentrates online
buy weed online
psychedelics
lsd
dmt
thank you sagain so much
purple kush online
ReplyDelete4-aco-dmt online
kratom powder online
albino penis envy
ayahuasca
changa dmt
flakka drug
tylenol with codeine
golden teachers
cbd oils
buy dmt online
ReplyDeletebuy psychedelics online
martain rocks weed
exotic carts official
exotic carts
stiiizy pods
exotic carts review
dank carts
smart carts online
exotic carts fake
Hello do you know that the best treatment for opiod addiction,illegal or prescription is suboxone pills. Suboxone pills provides versatility in the way it helps patients.our medicated shop is the place to shop for all kinds of medication needs including;
ReplyDeleteBuUY HYDROCODONE ONLINE
BUY OXYCODONE ONLINE
BUY OXYCONTIN ONLINE
BUY VALIUM ONLINE
BUY VYVANSE ONLINE
BUY GABAPENTIN ONLINE
BUY AMBIEN ONLINE
Check out all our available pills on our online shop. https://greenlandspharmacy.com/
buy-exotic-carts-online
ReplyDeletebuy-dank-woods-online
backwoods-min-5packs
wholesale-exotic-carts-min-100
buy-banana-kush
buy-king-pen-online
wholesale-exotic-carts-min-100
buy-banana-kush
buy-runtz-online
buy-space-monkey-meds
buy-connected-strain
buy-cali-kush
backwoods-min-5packs
buy-blue-dream-online
wholesale-smart-carts
wholesale-rove-carts-min-100
eureka-carts
wholesale-exotic-carts-min-100
ccell-wholesale-min-100
green-crack-cannabis-strain
smart-bud-can
buy-smart-cart-online
buy-gorilla-glue-online
Order weed online
ReplyDeleteMail order marijuana
Buy weed online
Medical cannabis dispensary
Buy counterfeit money online
buy cannabis chocolate chip cookies online with paypal
ReplyDeletecannabis banana bread for sale online with cash app
buy mini js online with paypal
buy moon rockets pre roll online
buy pre rolled joints online usa
buy marley black indica oil online zelle accepted
buy kandypens slim vaporizer online Canada
cannabis cherry oil for sale online with zelle
cannabis hash oil for sale online with paypal
buy cannabis joint muscleoil online bitcoin accepted
buy cbd oil cartridges online USA
buy lemon trainwreck strain online with paypal
buy cannabis trim capsules online with bitcoin
buy legal cbd hemp oil online with zelle
buy cannabis fat burner caps online cash app
buy cannabis coconut oil caps online Canada
buy cannabis coconut oil online UK
girl scout cookies for sale online paypal accepted
buy cannabis chocolate crispy bites online Australia
buy rockstar kush shatter online USA
buy sweet skunk shatter online Canada
buy violator kush shatter online UK
buy sour diesel shatter online bitcoin accepted
buy pink kush shatter online paypal accepted
buy og kush budder online USA
buy mixed indica shatter online UK
buy mixed indica co2 shatter online Australia
buy master kush shatter online with paypal
buy cannabis peppermint tea-bags-online credit card accepted
buy chemo crumble online Paypal accepted
buy chemdawg shatter online UK
buy cannabis lollipops online with paypal
Medical marijuana has already been successfully legalized in 23 US states and Washington DC. Why? Because there is substantial scientific proof that weed is actually good for you. In fact, some researchers claim marijuana to be a natural panacea to a large number of diseases.Email us at medicalcannabisbudshop@gmail.com for your order process and talk to our experts for advice....we provide reliable and discreet overnight delivery within 50 states and Canada and our branch in Netherlands is in charge of orders from Europe and Asia....we provide you with the best buds,cbd oils,thc cartridges,dankwoods,backwoods,cbd massage ceams,cbd capsules......
ReplyDeleteblue dream weed for sale
cannabis oil capsule for sale
buy-oil-cartridges
hemp-cbd-lotion
best-cbd-oil-online
buy-girl-scout-cookies-weed-online
buy-gelato-weed
buy-gorilla-glue-weed
buy-gorilla-glue-4
buy-hemp-seed-oil
thc-oil-cartridges-for-sale-online
pineapple-express-weed-for-sale
where-can-you-buy-dankwoods
backwoods-buy-online
cheap-weed-for-sale
get your prerolls at $45 minimum via pay pal and other payments service,weekly promotions..............................
What exactly is CBD (cannabidiol) oil and what can it do? What doesn’t it do? You’re likely here because someone told you to try CBD oil for pain, insomnia, anxiety, cancer, or another medical condition. Or you may be interested in trying it for everyday wellness, like a daily supplement.
ReplyDeleteMedical marijuana has already been successfully legalized in 23 US states and Washington DC. Why? Because there is substantial scientific proof that weed is actually good for you. In fact, some researchers claim marijuana to be a natural panacea to a large number of diseases.Email us at medicalcannabisbudshop@gmail.com for your order process and talk to our experts for advice....we provide reliable and discreet overnight delivery within 50 states and Canada and our branch in Netherlands is in charge of orders from Europe and Asia....we provide you with the best buds,cbd oils,thc cartridges,dankwoods,backwoods,cbd massage ceams,cbd capsules......
blue dream weed for saleHowever, when shopping at your local cannabis shop, it’s important to note how much CBD and THC are in a product. Products that contain both CBD and THC are increasingly common at cannabis retailers and suit the needs of many consumers.
best quality psychedelics,100% tested with discreet delivery
ReplyDeletebuy-mescaline
ketamine-for-sale
buy-mdma
ibogaine-for-sale
shrooms-for-sale
buy-ayahuasca
4-aco-dmt-for-sale
5-meo-dmt-buy
100% guarantee delivery worldwide
The drugs foster new perspectives on old problems. One of the things our mind does is tell stories about ourselves. If you're depressed, you're being told a story perhaps that you're worthless, that no one could possibly love you,
ReplyDeletebest quality psychedelics,100% tested with discreet delivery
buy-mescaline
What the drugs appear to do is disable for a period of time the part of the brain where the self talks to itself.
Do you know cali420supplies is the best marijuana dispensary in california and do ship to all states and 3 days of discreet shipping.
ReplyDeleteclick to the links below and get high we have the best quality(TOP SHELF).
CONTACT US:
CALL/TEXT:+12563332189
EMAIL US AT:dovianlawson@gmail.com
blueberry-kush
jungle-boys-weed
packwoods-for-sale
dankwoods-for-sale
buy-space-monkeys-merd
mario-carts-for-sale
exotic-carts-for-sale
brass-knuckles-for-sale/buy-brass-knuckles-online
buy-dab-pen
buy-smart-cart-cartridge
gelato-for-sale
buy-magic-mushrooms
buy-girls-scout-cookies-online
master-kush-for-sale
kush-for-sale
buy-fruity-pebbles-online
buy-apple-jack-online
buy-banana-og-online
buy-mars-og-online
we also give free offers for bulk orders
Nice one, I guess we just need to stop for a brief moment and read through. I dont read that much but I really had some good time grabbing some knowledge. Still I am out to speak and propose you exotic stuffs like
ReplyDeleteexotic carts official
buy exotic carts
buy exotic carts online.
exotic carts review
exotic carts website
gorilla glue exotic carts.
exotic carts fake
kingpen official
kingpen review.
mario carts official
mario carts online
exotic carts website
exoticcartsofficial
exotic carts for sale
exotic carts thc
exotic cartridges
exotic carts flavors
@exoticcartsofficial
real exotic carts
exotic carts vape cartridges
exotic cart
exotic carts vape pen
mario kart cartridge
king pen battery
exoticcarts
exotic carts official website
supreme cartridges
mario carts cartridges
exotic carts review
710 kingpen gelato
710 king pen battery
supreme cartridge
supreme brand oil cartridge
what are exotic carts
Medical marijuana has already been successfully legalized in 23 US states.
ReplyDeleteand California LA is one of the best state where top shelf medical marijuana are been sold at cali420supplies.com
Why? Because there is substantial scientific proof that weed is actually good for you.
In fact, some researchers claim marijuana to be a natural panacea to a large number of diseases.
Email us at dovianlawson@gmail.com for your order process and talk to our experts for advice...
we provide reliable and discreet overnight delivery within 50 states and Canada and our branch in Netherlands is in charge of orders from Europe and Asia....
we provide you with the best buds,cbd oils,thc cartridges,dankwoods,backwoods,cbd massage ceams,cbd capsules......
CALL/TEXT:+12563332189
EMAIL US AT:dovianlawson@gmail.com
blueberry-kush
jungle-boys-weed
packwoods-for-sale
dankwoods-for-sale
buy-space-monkeys-merd
mario-carts-for-sale
exotic-carts-for-sale
brass-knuckles-for-sale/buy-brass-knuckles-online
buy-dab-pen
buy-smart-cart-cartridge
gelato-for-sale
buy-magic-mushrooms
buy-girls-scout-cookies-online
master-kush-for-sale
kush-for-sale
buy-fruity-pebbles-online
buy-apple-jack-online
buy-banana-og-online
buy-mars-og-online
we also give free offers for bulk orders
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Buy Glo extracts online
ReplyDeleteGlo extracts for sale online
order glo extracts online
Buy GLO Extracts with bitcoins and credit cards online
buy tko cartridges online
Tko extracts for sale
Buy TKO EXTRACTS Online
Order Ufo Extracts online
where to buy King Pen Cartridges
Buy Ufo Extracts online
Buy carts online
Buy exotic carts 1gram
Buy carts online
Ordering space monkey meds for sale online
ReplyDeletebuy space monkey meds online
Order Space Monkey Meds Online
Space Monkey Meds For Sale
Buy Cannabis Online
MONKEY METH
Buy Smart Carts Online
ReplyDeleteBuy Smart Carts THC oil vape cartridges online
Buy Smart carts Online
Oil Cartriges For Sale
buy carts and buds
smart carts for sale
Buy vape carts online
vape carts for sale
buy vapes in USA
Buy smart buds online
smart buds exotic
smarts cans
Get dispensary offers you premium-quality cannabis buds including sativa, indica, hybrids, and high-CBD flowers all carrying a generous layer of cannabinoid-rich resin, and some of them can pack a serious punch. We deliver in all the states in the US and also Europe and Australia. https://getdispensary.org/shop/ call/text or whassap at +17202138072
ReplyDeletedispensary united states
og kush ferminized cannabis seeds
buy kush online in usa
buy kush herbal incense online
buy kush hemp flowers
buy vapes online cheap
vapes in united states
buy vapes uk
buy concentrates online usa
buy cannabis concentrates
marijuana concentrates online store
online concentrates cbd thc usa
buy indical cannabis oil
buy indical catridges online
buy indical capsules online
buy satival cbd oil
easy buy satival cannabis in usa
cbd oil benefits
best cbd oil
how to buy wax
buy vapes onlien europe
buy live resin cartridge
live resin concentrate
buy live resin carts
buy live resin uk
buy vapes las vegas
sativa cannabis strains
buy sativa seeds feminized
kush strains
buy kush cannabis plants oregon
buy vapes in bulk
live resin concentrate
Balanced Hybrid Cannabis INDICA Top Shelf Strains
CONCENTRATE High Terpene Full Spectrum Extracts
HOW TO BUY WEED ONLINE
CONCERNED ABOUT BUYING MARIJUANA ONLINE
Get dispensary offers you premium-quality cannabis buds including sativa, indica, hybrids, and high-CBD flowers all carrying a generous layer of cannabinoid-rich resin, and some of them can pack a serious punch. We deliver in all the states in the US and also Europe and Australia. https://getdispensary.org/shop/ call/text or whassap at +17202138072
ReplyDeletedispensary united states
og kush ferminized cannabis seeds
buy kush online in usa
buy kush herbal incense online
buy kush hemp flowers
buy vapes online cheap
vapes in united states
buy vapes uk
buy concentrates online usa
buy cannabis concentrates
marijuana concentrates online store
online concentrates cbd thc usa
buy indical cannabis oil
buy indical catridges online
buy indical capsules online
buy satival cbd oil
easy buy satival cannabis in usa
cbd oil benefits
best cbd oil
how to buy wax
buy vapes onlien europe
buy live resin cartridge
live resin concentrate
buy live resin carts
buy live resin uk
buy vapes las vegas
sativa cannabis strains
buy sativa seeds feminized
kush strains
buy kush cannabis plants oregon
buy vapes in bulk
live resin concentrate
Balanced Hybrid Cannabis INDICA Top Shelf Strains
CONCENTRATE High Terpene Full Spectrum Extracts
HOW TO BUY WEED ONLINE
CONCERNED ABOUT BUYING MARIJUANA ONLINE
HIGHLY RATED EDIBLES
Aura Edibles Gummy Candies
vidmate
ReplyDeletethe art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
buy gelato weed online
ReplyDeletebuy white widow weed online
buy gorilla glue online
buy moonrock online
buy og kush online
buy blue dream online
wind vape cartridges
ReplyDeletepotters cannabis cartridges
jetty extracts cartridges
cobra extracts
raw garden cartridges
buy litxtracts online
buy select cartridges online
ReplyDeletebuy plug and play cartridges
buy supreme carts online
buy Mario carts online
buy eureka vapor carts
buy brass knuckles cartridges online
buy stiiizy pods
ReplyDeletebuy exotic carts online
Buy Rove Carts Online
Buy Smart Carts Online
Buy Cereal Carts Online
Buy Smart Carts Online
ReplyDeleteBuy Cereal Carts Online
Buy Dank Vape Carts
buy vape cartridges online
buy west coast cure carts online
cali gold extract cartridges
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
am impressed by this post good thinking
ReplyDeleteBUY WEED ONLINE MELBOURNE
BUY CANNABIS ONLINE MELBOURNE
BUY MARIJUANA ONLINE MELBOURNE
WHERE TO BUY WEED ONLINE MELBOURNE
WHERE TO BUY CANNABIS ONLINE MELBOURNE
WHERE TO BUY MARIJUANA ONLINE MELBOURNE
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes. The main psychoactive
ReplyDeletepart of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
buy real weed online
buy edibles
order cannabis edibles
buy recreational weed online
order cbd edibles online
buy cbd hemp oil
buy medical weed online
buy dank vapes cartridges
buy brass knuckles
buy mario carts
buy weed online without medical card
buy cannabis seeds online
buy OG kush
buy sour diesel weed online
buy moonrocks
hybrid strains
indica strains
dank vapes
ReplyDeletereal dank vapes
dank vapes for sale
buy vape carts
thc carts
vape dank
vape carts
dank carts
boston terrier pups for sale
buy a Boston terrier pup
boston terrier puppies for adoption
boston terrier kennel
Scottish Fold Cattery
Scottish Fold Kitten For Sale
Scottish fold cat
dank vapes
ReplyDeletereal dank vapes
dank vapes for sale
buy vape carts
thc carts
vape dank
vape carts
dank carts
boston terrier pups for sale
buy a Boston terrier pup
boston terrier puppies for adoption
boston terrier kennel
Scottish Fold Cattery
Scottish Fold Kitten For Sale
Scottish fold cat
dank vapes
ReplyDeletereal dank vapes
dank vapes for sale
buy vape carts
thc carts
vape dank
vape carts
dank carts
boston terrier pups for sale
buy a Boston terrier pup
boston terrier puppies for adoption
boston terrier kennel
Scottish Fold Cattery
Scottish Fold Kitten For Sale
Scottish fold cat
dank vapes
ReplyDeletereal dank vapes
dank vapes for sale
buy vape carts
thc carts
vape dank
vape carts
dank carts
boston terrier pups for sale
buy a Boston terrier pup
boston terrier puppies for adoption
boston terrier kennel
Scottish Fold Cattery
Scottish Fold Kitten For Sale
Scottish fold cat
buy cocain online
ReplyDeletebuy edibles online
buy concentrate online
buy cartridges online
buy purple kush online
buy master kush online
buy hindu kush online
buy fentanyl-injection online
buy-mitragynine-online
buy-oxycodone-powder-online
buy-cannabis oil-online
buy-vape pens-online
buy-herion-online
buy-pills-online
buy-doc powder-online
Medical marijuana has already been successfully legalized in 23 US states.
ReplyDeleteand California LA is one of the best state where top shelf medical marijuana are been sold at 420cannabisthrives.com
Why? Because there is substantial scientific proof that weed is actually good for you.
In fact, some researchers claim marijuana to be a natural panacea to a large number of diseases.
Email us at scottemassimo@gmail.com for your order process and talk to our experts for advice...
we provide reliable and discreet overnight delivery within 50 states and Canada and our branch in Netherlands is in charge of orders from Europe and Asia....
we provide you with the best buds,cbd oils,thc cartridges,dankwoods,backwoods,cbd massage ceams,cbd capsules......
CALL/TEXT:+12563332189
EMAIL US AT:scottemassimo@gmail.com
cbd-oil-for-sale
buy-cbd-oil-online
buy-vapes-carts-online-2
buy-vapes-carts-online
buy-vape-juice-online
buy-vape-pen-online-3
buy-vape-pen-online-2
buy-stiiizy-pods-online
buy-vape-pen-online
kingpen-carts-for-sale
exotic-carts-for-sale
mario-cartridges-for-sale
barewoods-for-sale
dabwoods-carts-for-sale
backwoods-cigars-for-sale
dankwoods-for-sale
og-kush-seeds-for-sale
where-can-i-buy-packwoods
where-to-buy-gorilla-glue
kush-for-sale
blueberry-kush-for-sale
where-to-buy-gelato
buy-weed-online
buy-real-weed-online-cheap
weed-for-sale
buy-moonrock-online
where-to-buy-kush-in-houston
buy-top-shelf-marijuana-online
420cannabisthrives.com/
we also do give free offers for bulk buy!
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Medical marijuana has already been successfully legalized in 23 US states.
ReplyDeleteand California LA is one of the best state where top shelf medical marijuana are been sold at 420cannabisthrives.com
Why? Because there is substantial scientific proof that weed is actually good for you.
In fact, some researchers claim marijuana to be a natural panacea to a large number of diseases.
Email us at scottemassimo@gmail.com for your order process and talk to our experts for advice...
we provide reliable and discreet overnight delivery within 50 states and Canada and our branch in Netherlands is in charge of orders from Europe and Asia....
we provide you with the best buds,cbd oils,thc cartridges,dankwoods,backwoods,cbd massage ceams,cbd capsules......
CALL/TEXT:+12563332189
EMAIL US AT:scottemassimo@gmail.com
cbd-oil-for-sale
buy-cbd-oil-online
buy-vapes-carts-online-2
buy-vapes-carts-online
buy-vape-juice-online
buy-vape-pen-online-3
buy-vape-pen-online-2
buy-stiiizy-pods-online
buy-vape-pen-online
kingpen-carts-for-sale
exotic-carts-for-sale
mario-cartridges-for-sale
barewoods-for-sale
dabwoods-carts-for-sale
backwoods-cigars-for-sale
dankwoods-for-sale
og-kush-seeds-for-sale
where-can-i-buy-packwoods
where-to-buy-gorilla-glue
kush-for-sale
blueberry-kush-for-sale
where-to-buy-gelato
buy-weed-online
buy-real-weed-online-cheap
weed-for-sale
buy-moonrock-online
where-to-buy-kush-in-houston
buy-top-shelf-marijuana-online
420cannabisthrives.com/
we also do give free offers for bulk buy!
Buy cbd and high thc concentration products from a trusted and reliable online legal cannabis shop with discreet overnight shipment services with no marijuana card needed.
ReplyDeletethc oil for sale online
rso oil for sale
where to buy rick simpson oil
buy rick simpson oil
buy edibles online
buy edibles online ship anywhere
cbd crystals for sale
vape pen cartridge for sale
grape backwoods for sale
cbd products for sale
pre filled vape cartridges wholesale
pre filled hash oil cartridges for sale
hash oil cartridges for sale
order backwoods online
buy thc oil online
cannabis oil for sale
rick Simpson oil buy
buy backwoods online
thc oil for sale online
high thc oil for sale
backwoods for sale
hash oil cartridges for sale online
thc cartridges for sale
exotic carts thc
pre filled vape cartridges for sale
pre filled hash oil vape cartridges for sale online
Have you been searching online for a trusted online cannabis shop where you can find backwoods for sale?,dank woods for sale?where to buy rick simpson oil online?buy edibles online ship anywhere?,then we have all that answered here and more at alpha cbd shop
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Exotic cart is a well known prefilled THC oil cartridge, and stoners from the west to east drift use them. ... Our cartscontain premium lab tried THC Oil which these days, is hard to find. Our pre-filled cannabis cartridges are ideal for vaping Maryjane in a hurry.
ReplyDeletemario carts
exotic carts
dankwoods for sale
exotic carts website
mario carts website
mario carts flavors
exotic carts flavors
mario carts online
mario cartridges
mario carts for sale
exotic carts review
gorilla glue exotic carts
mango kush dank vapes
mario carts pc
mario carts vape
mario carts thc
exotic carts
buy mario carts cartridges
mario carts
buy mario carts vape
order exotic carts vape
ReplyDeleteDank Carts
Dank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy weed online
buy marijuana online
marijuana official website
dank carts for sale
buy edibles online
buy moonrock
buy cbd oil online
stiiizy pods
stiiizy starter kit
buy marijuana strains online
dankvapes for sale
buy exotic carts
buy moonrocks online
buy weed online
buy medical marijuana
buy good vapes online
buy real weed
cbd oil for sale
buy cbd edibles online
buy moon rocks
buy sunrocks weed
buy OG kush
buy weed in usa
buy marijuana California
dankvape for sale
buy exotic carts
buy blueberry weed
dank vapes
dank vape cartridges
best place to buy weed online
buy legal marijuana
buy weed stocks
buy weed strains
buy northern lights weed
buy kush online
moonrocks weed
sunrocks vs moonrocks
order marijuana strains
buy dank vapes for sale
best cbd oil
buy good weed
buy white widow weed
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Please do contact us for your best order and good prices, Delivery is via USPS, TNT, AUSPOST, FEDEX, UPS and Express Mail depending on customers and much more. we offer discreet shipping world wide depending on the buyers location. We offer fast overnight shipping and reliable shipping within USA, to Australia, Canada, UK, Germany, Sweden ,Columbia, etc ,We are on Promotion this December visit out shop now and get best deals.
ReplyDeletepacwoods for sale
dank carts
exotic carts official
dankwood for sale
chronic carts for sale
buy moonrock clear carts
buy dankwoods online
chronopoly carts review
muha med cartridges
buy chronopoly carts flavors
buy organic smart carts
buy dabwoods online
stiiizy flavors
king pen
dabwoods carts
buy stiiizy pods cartridges
Buy dankwoods online
chronopoly carts
dankwoods
buy stiiizy cartridges battery
buy incredible edibles
buy 710 kingpen
710 king pen
kingpen cartridges
cereal carts
dabwoods review
buy exotic carts flavors
exotic carts official
mario carts flavors
exotic carts official account website
dabwoods carts
order pre roll packwoods
cereal carts for sale
order cereal carts
chronic carts
buy chronic carts
stiiizy battery
prefilled thc cartridges
dankwoods for sale
buy dankwoods
dankwood
moon rock clear carts
best dankwoods
dab carts
king pen for sale
Please do contact us for your best order and good prices, Delivery is via USPS, TNT, AUSPOST, FEDEX, UPS and Express Mail depending on customers and much more. we offer discreet shipping world wide depending on the buyers location. We offer fast overnight shipping and reliable shipping within USA, to Australia, Canada, UK, Germany, Sweden ,Columbia, etc ,We are on Promotion this December visit out shop now and get best deals.
ReplyDeletepacwoods for sale
dank carts
exotic carts official
dankwood for sale
chronic carts for sale
buy moonrock clear carts
buy dankwoods online
chronopoly carts review
muha med cartridges
buy chronopoly carts flavors
buy organic smart carts
buy dabwoods online
stiiizy flavors
king pen
dabwoods carts
buy stiiizy pods cartridges
Buy dankwoods online
chronopoly carts
dankwoods
buy stiiizy cartridges battery
buy incredible edibles
buy 710 kingpen
710 king pen
kingpen cartridges
cereal carts
dabwoods review
buy exotic carts flavors
exotic carts official
mario carts flavors
exotic carts official account website
dabwoods carts
order pre roll packwoods
cereal carts for sale
order cereal carts
chronic carts
buy chronic carts
stiiizy battery
prefilled thc cartridges
dankwoods for sale
buy dankwoods
dankwood
moon rock clear carts
best dankwoods
dab carts
king pen for sale
Psychedelics are a class of drug whose primary action is to trigger psychedelic experiences via serotonin receptor agonism, causing thought and visual/auditory changes, and altered state of consciousness. Major psychedelic drugs include mescaline, Lysergic acid diethylamide, psilocybin and DMT.
ReplyDeletebuy psychedelic mushrooms Online USA
buy ibogaine HCl for sale
buy mdma pills online
buy changa dmt online
Kentucky ayahuasca drink
buy ibogaine online
buy ayahuasca tea
buy mescaline
sex on mdma tumblr
buy penis envy mushroom for sale
buy golden teacher mushrooms for sale
mescaline drugs for sale
buy liberty cap mushrooms
buy ibogaine
buy liquid lsd
what is dmt
buy lsd
buy albino penis envy
buy penis envy mushrooms
la vieja changa
buy kratom powder
buy kratom online
order magic mushrooms online
buy mdma pills online
buy dmt drug online
Psychedelics are a class of drug whose primary action is to trigger psychedelic experiences via serotonin receptor agonism, causing thought and visual/auditory changes, and altered state of consciousness. Major psychedelic drugs include mescaline, Lysergic acid diethylamide, psilocybin and DMT.
ReplyDeletebuy psychedelic mushrooms Online USA
buy ibogaine HCl for sale
buy mdma pills online
buy changa dmt online
Kentucky ayahuasca drink
buy ibogaine online
buy ayahuasca tea
buy mescaline
sex on mdma tumblr
buy penis envy mushroom for sale
buy golden teacher mushrooms for sale
mescaline drugs for sale
buy liberty cap mushrooms
buy ibogaine
buy liquid lsd
what is dmt
buy lsd
buy albino penis envy
buy penis envy mushrooms
la vieja changa
buy kratom powder
buy kratom online
order magic mushrooms online
buy mdma pills online
buy dmt drug online
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
ReplyDeletepacwoods for sale
dank carts
marijuana official
dankwood for sale
buy edibles
buy moonrock clear carts
buy dankwoods online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online USA
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy stiiizy
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy heavy hitters vape
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
buy thc cartridges online
buy sour diesel weed
buy moonrocks online
buy moonrock weed
dankwoods
buy cannabis online
buy packwoods
buy dankwood
buy packwood online
buy cbd hemp oil
buy pre roll dankwoods
buy backwoods online
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
ReplyDeletepacwoods for sale
dank carts
marijuana official
dankwood for sale
buy edibles
buy moonrock clear carts
buy dankwoods online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online USA
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy stiiizy
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy heavy hitters vape
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
buy thc cartridges online
buy sour diesel weed
buy moonrocks online
buy moonrock weed
dankwoods
buy cannabis online
buy packwoods
buy dankwood
buy packwood online
buy cbd hemp oil
buy pre roll dankwoods
buy backwoods online
Its full of information I am looking for and I love to post a comment that "The content of your post is awesome" Great
ReplyDeletewill help you more:
you want to make a game using Canvas and HTML5? Follow along with this tutorial and you'll be on your way in no time.
HTML Game Tutorial
buy cannabis online
ReplyDeletebuy cannabis online
buy marijuana online
buy cannabis online
buy shrooms online
buy cannabis online
buy og kush online
buy cannabis online
buy cannabis online
buy vape online
buy weed online
buy weed online
buy weed online
buy concentrate online
buy weed online
buy white fire og kush online
buy marijuana online
buy weed online
buy cannabis online
ReplyDeletebuy mdma online
buy marijuana online
buy cannabis online
buy cannabis online
buy og kush online
buy cannabis online
buy cannabis online
buy vape online
buy weed online
buy weed online
order medical marijuana online
buy concentrate online
buy xanax tablets online
buy white fire og kush online
buy marijuana online
buy weed online
buy vape online
buy moonrock online
buy weed online
order weed online
buy weed online
Quality assurance and great products have been a major concern among experts in the cannabis industry. To meet recommendations for producing medicinal marijuana products that are both effective and adequate to meet our clients’ needs, our company is strictly adherent to delivering just the gold standard. Based on a consensus, our quality assurance committee has resolved to a strict adherence to the protocol in order to maintain a standard across the production chain. The quality of our lab-tested products is unmatched in the entire industry. Cannabis Market is the leader!
ReplyDeletebuy girls scourt cookies online
buy strawberry cough online
buy gorilla glue #4 online
buy granddaddy purple feminized seeds
buy blue dream weedstrain
buy white widow weedstriain
buy afghan kush online
buy blueberry kush online
buy lemon haze online
buy pineapple express online
buy purple haze feminized seeds
buy alaskan thunderfuck weedstrain
buy granddaddy purple feminized seeds online
buy blue bream feminized Seedsonline
buy lemon kush weed strain
buy girls scourt cookies onlinr
buy green crack online
buy jack herb weedstrain
buy skywalker og weedstrain
buy sour disel weedstrain
buy white widow online
buy og kush onliine
buy northern light weedstrain
buy white widow online
buy Obama kush weedstrain
buy mario carts online
buy bubble kush online
buy blue dream weedstrain
buy exortic carts online
buy-moon-rocks
ReplyDeletebuy-purple-haze
buy-og-kush-online
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
buy-moonrocks-online
rove-vape-cartridge
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
rove-vape-cartridge
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-sour-diesel
buy-moon-rocks
ReplyDeletebuy-purple-haze
buy-og-kush-online
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
buy-moonrocks-online
rove-vape-cartridge
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
rove-vape-cartridge
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-sour-diesel
buy-moon-rocks
ReplyDeletebuy-purple-haze
buy-og-kush-online
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
buy-moonrocks-online
rove-vape-cartridge
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
rove-vape-cartridge
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-sour-diesel
buy-moon-rocks
ReplyDeletebuy-purple-haze
buy-og-kush-online
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
buy-moonrocks-online
rove-vape-cartridge
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
rove-vape-cartridge
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-sour-diesel
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy weed online
buy marijuana online
marijuana official website
dank carts for sale
buy edibles online
buy moonrock
buy cbd oil online
stiiizy pods
stiiizy starter kit
buy marijuana strains online
dankvapes for sale
buy exotic carts
buy moonrocks online
buy weed online
buy medical marijuana
buy good vapes online
buy real weed
cbd oil for sale
buy cbd edibles online
buy moon rocks
buy sunrocks weed
buy OG kush
buy weed in usa
buy marijuana California
dankvape for sale
buy exotic carts
buy blueberry weed
dank vapes
dank vape cartridges
best place to buy weed online
buy legal marijuana
buy weed stocks
buy weed strains
buy northern lights weed
buy kush online
moonrocks weed
sunrocks vs moonrocks
order marijuana strains
buy dank vapes for sale
best cbd oil
buy good weed
buy white widow weed
Welcome to Ragdoll Kittens Cattery click here to adopt a ragdoll kitten online We are a small and loving cattery . We are pleased that you have chosen to visit our Ragdoll cats/Ragdoll kittens cattery, and hope you will notice right away from our website how beautiful and loved our Ragdoll cats and kittens are. These beauties are easily integrated into our loving family home, first as mothers carrying the litters, and then from the time the ragdoll kittens are born until they are adopted so we always have Ragdoll kittens for sale|Ragdoll kittens for adoption|Ragdoll kitten price|Ragdolls|Cost of Ragdoll kittens|. Our adult cats have tested negative for HCM and PKD1 through University of California Davis. Upon request, we have five generations of pedigree documentation on our adults available to anyone who is interested. Ragdoll kittens are registered with The International Cat Association (RAGDOLL KITTENS FOR SALE),and are never caged. The cats that are in our reputable breeding program can produce mink, sepia and traditional Ragdoll kittens. Ragdolls have a laid-back personality and enjoy being physically handled making them one of the best lap cats! We are all family here at Ragdoll kittens cattery since we are ragdoll kitten breeders and all the love we bestow by holding each cat and kitten daily further Teacup RAGDOLL Kittens for sale|Hypoallergenic kittens for sale nurtures their loving personalities and temperaments,TICA/CFA REGISTERED RAGDOLL KITTENS FOR SALE thanks for adopting a ragdoll ketten from us
ReplyDeleteHello, and welcome to our website for buy fennec foxes as pets. A family run farm, we have extensive experience in breeding fennec foxes.
READ MORE We provide new homes for our baby fennec fox pets for sale. We equally provide shipping services to ensure your fox arrives your location with no hassles. Due to
fennec fox pet for sele being illegal in certain states, we do not facilitate delivery nationwide. Our Fennec Foxes for Sale are limited to a select states which consider it legal. We equally facilitate the acquisition of Permits in states which require on before owning a
buy baby fennec fox for sele
WELCOME TO pug puppies BREEDERS HOME BUY A PUG ONLINE|PUG PUPPIES FOR SALE|ADOPT A PUG ONLINE|PUG|BLACK PUG PUPPIES FOR SALE
ReplyDeleteWe are so glad you stopped by to check out our amazing TEACUP Pug puppies. All of our animals come fully up to date on vaccinations, heart-worm tested negative, and de-wormed, as well as neutered, and treated for any ailments found upon veterinary examination Adopt a teacup Pug puppy
Ownership of a Pug includes a commitment that is wider in scope than providing doggy necessities and allowing this jovial little pet to occupy a portion of your home. Pug ownership is a give-and-take relationship that will continue throughout the little dog’s life. That enjoyable companionship thrives when each member of the pair respects the other and camaraderie rules the union. Your Pug will entertain you, love you, and be obedient and faithful to you if you spend time with your doggy friend.
Adopt a pug puppies online puppy onlie or pug puppies for sale online does not all depends on the money involve. You have to love
Black pug puppies for sale at heart before you go in search of pug puppies for sale or adopt a pug puppy.This means that you have to keep the pug puppy price or cost of a pug puppy or a teacup puppy in mind before you harnest the interest of buying a pug online.
Welcome to Glock Store ,a Discreet online depot where you can buy firearms and ammunition , Buy guns online ,
buy ammo discreetly without monotonous deocumentations and ship to your prefered location with no hassle.We are FFL Dealers and stricktly follow the Regulations of the Gun Control Act(GCA).Purchasing Fireamrs and Ammunition online with caution has always been a long process of paperwork because of the inter/Intra state Laws controlling the buying and distribution.At Glock store online shop we cut the Gordian knot and deliver to your location with no hassle.We have a wide range of firearms and ammunition for sale ,buy Ammo such as shotguns,Long guns,Magazines, Optics and accesories which include Century Arms,Kel-Tec,
Ruger,
AR15,
AK47,.Despite the perusal increase in surounding firearms,we issue uncomplicated paths to acquire Firearms for individual and or Family security.If you have ever asked yourself
how to buy guns and ammunition online with ease and,safety then your question is answered once you are here.All you have to do is choose your firearms, optic, magazine,accessories and add to cart then proceed to check out. READ MORE on how to buy guns and ammunition online discreet.
Pain management, pain medicine,buy pain medication and buy research chemicals, pain control or algiatry, is a branch of medicine employing an interdisciplinary approach for easing the suffering and improving the quality of life of those living with chronic pain,
buy lipitor
You can also buy weed online, buy cbd oil
Welcome to Glock Store ,a Discreet online depot where you can buy firearms and ammunition , Buy guns online ,
ReplyDeletebuy ammo discreetly without monotonous deocumentations and ship to your prefered location with no hassle.We are FFL Dealers and stricktly follow the Regulations of the Gun Control Act(GCA).Purchasing Fireamrs and Ammunition online with caution has always been a long process of paperwork because of the inter/Intra state Laws controlling the buying and distribution.At Glock store online shop we cut the Gordian knot and deliver to your location with no hassle.We have a wide range of firearms and ammunition for sale ,buy Ammo such as shotguns,Long guns,Magazines, Optics and accesories which include Century Arms,Kel-Tec,
Ruger,
AR15,
AK47,.Despite the perusal increase in surounding firearms,we issue uncomplicated paths to acquire Firearms for individual and or Family security.If you have ever asked yourself
how to buy guns and ammunition online with ease and,safety then your question is answered once you are here.All you have to do is choose your firearms, optic, magazine,accessories and add to cart then proceed to check out. READ MORE on how to buy guns and ammunition online discreet.
Pain management, pain medicine,buy pain medication and buy research chemicals, pain control or algiatry, is a branch of medicine employing an interdisciplinary approach for easing the suffering and improving the quality of life of those living with chronic pain,
buy lipitor
You can also buy weed online, buy cbd oil
Hello, and welcome to our website for buy fennec foxes as pets. A family run farm, we have extensive experience in breeding fennec foxes.
READ MORE We provide new homes for our baby fennec fox pets for sale. We equally provide shipping services to ensure your fox arrives your location with no hassles. Due to
fennec fox pet for sele being illegal in certain states, we do not facilitate delivery nationwide. Our Fennec Foxes for Sale are limited to a select states which consider it legal. We equally facilitate the acquisition of Permits in states which require on before owning a
buy baby fennec fox for sele
Hello, and welcome to our website for the best hand raised
ReplyDeletehand raised macaw parrots for sale. We pride ourselves in the best taming practices of macaws among aviaries. All of ourmacaws for sale are bred in a disease-free Biosecure breeding sanctuary. They are well socialized, having been raised in our home as members of our own family in order for them to become ready to be a member of yours, we have green wing macaw,severe macaw for sale,scarlet macaw for sale,blue and yellow macaw for sale among others. They are quite comfortable around all ages, including the elderly and young children. When you purchase a bird from Us, we are committed to offering lifetime support and guidance to you and your family.You can read more and view our available birds.You can
READ MORE and view our avilable birds.
We have other cat breeds ready for adoption, Welcome to British Shorthair kittens cattery, home of Registered British shorthair kittens for sale. As Registered and well recognized British shorthair kittens breeder, we have been raising British Shorthair kittens since 2015.As British shorthair kittens breeder,we have extensive experience in breeding and grooming British Shorthair Kittens . We provide an opportunity to become an owner of our highly valued British shorthair kittes for sale which have been well trained and have all qualities of a good British Shorthair such as calmed personalities of British shorthair kittens and good tempers ,hypoallergenic kittens for sale.We equally provide shipping services to ensure your British Shorthair kitten arrives your location with no hassles. So feel at home adopt a British shorthair kitten online or adopt a British shorthair kitten near me with ease.
Welcome to our farm where we breed Registered pomeranian puppies for sale.As a registered pomeranian puppies breeder, we have made it possible for pomeranian puppy lovers to
buy pomeranian puppies online,buy zwergpitz pomeranian from our family run farm. Pomeranian dogs are small dogs with a weight of 1.36 to 3.17 kg and a withers height of 15 to 18 cm. They are compact but robust dogs with a lush, textured coat and a tall and flat tail. The top coat forms a fur ruff on the neck, for which poms are known, and on the hindquarters they have a margin of feathered hair.You can click HERE to view our available pomeranian puppies
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
ReplyDeletepacwoods for sale
dank carts
marijuana official
dankwood for sale
buy edibles
buy moonrock clear carts
buy dankwoods online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online USA
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy stiiizy
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy heavy hitters vape
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
buy thc cartridges online
buy sour diesel weed
buy moonrocks online
buy moonrock weed
dankwoods
buy cannabis online
buy packwoods
buy dankwood
buy packwood online
buy cbd hemp oil
buy pre roll dankwoods
buy backwoods online
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
ReplyDeletepacwoods for sale
dank carts
marijuana official
dankwood for sale
buy edibles
buy moonrock clear carts
buy dankwoods online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online USA
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy stiiizy
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy heavy hitters vape
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
buy thc cartridges online
buy sour diesel weed
buy moonrocks online
buy moonrock weed
dankwoods
buy cannabis online
buy packwoods
buy dankwood
buy packwood online
buy cbd hemp oil
buy pre roll dankwoods
buy backwoods online
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Buy brass knuckles
ReplyDeleteSmart carts
Dank Cartridges
King pen
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Gorilla glue flavour
Exotic carts
Thc Vape Oil For Sale
buy-moon-rocks
ReplyDeletebuy-purple-haze
buy-og-kush-online
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
buy-moonrocks-online
rove-vape-cartridge
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
rove-vape-cartridge
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-sour-diesel
buy-moon-rocks
ReplyDeletebuy-purple-haze
buy-og-kush-online
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
buy-moonrocks-online
rove-vape-cartridge
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
rove-vape-cartridge
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-sour-diesel
buy-moon-rocks
ReplyDeletebuy-purple-haze
buy-og-kush-online
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
buy-moonrocks-online
rove-vape-cartridge
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
rove-vape-cartridge
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-sour-diesel
buy-moon-rocks
ReplyDeletebuy-purple-haze
buy-og-kush-online
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
buy-moonrocks-online
rove-vape-cartridge
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-moon-rocks
buy-purple-haze
buy-og-kush-online
buy-sour-diesel
rove-vape-cartridge
buy-moonrocks-online
smart-bud-cans
buy-space-monkey-meds
buy-smart-carts-online
rove-vape-cartridge
buy-space-monkey-meds
buy-sour-diesel
Quality assurance and great products have been a major concern among experts in the cannabis industry. To meet recommendations for producing medicinal marijuana products that are both effective and adequate to meet our clients’ needs, our company is strictly adherent to delivering just the gold standard. Based on a consensus, our quality assurance committee has resolved to a strict adherence to the protocol in order to maintain a standard across the production chain. The quality of our lab-tested products is unmatched in the entire industry. Cannabis Market is the leader!
ReplyDeletebuy girls scourt cookies online
buy strawberry cough online
buy gorilla glue #4 online
buy granddaddy purple feminized seeds
buy blue dream weedstrain
buy white widow weedstriain
buy afghan kush online
buy blueberry kush online
buy lemon haze online
buy pineapple express online
buy purple haze feminized seeds
buy alaskan thunderfuck weedstrain
buy granddaddy purple feminized seeds online
buy blue bream feminized Seedsonline
buy lemon kush weed strain
buy girls scourt cookies onlinr
buy green crack online
buy jack herb weedstrain
buy skywalker og weedstrain
buy sour disel weedstrain
buy white widow online
buy og kush onliine
buy northern light weedstrain
buy white widow online
vidmate
ReplyDeleteOrder Morphine online
ReplyDeleteBuy Mandrax Quaaludes Online
Order Oxycontin 80mg ,40mg, 20mg ( Pain management )securely online
Buy Securely Opana 40mg
Ritalin for sale | order Ritalin without prescription
Buy Roxicodone online | Roxicodone on sale
Purchase Tramadol Online without Prescription
Order Vicodin Securely Online
About Stealthvends Discreet Pharmacy
Where to buy Adderall Securely Online?
ReplyDeleteibogaine HCl for sale
buy MDMA Pills online
buy changa dmt online
buy morning glory seeds
buy ibogaine
buy Ayahuasca
buy mescaline
buy Penis envy
Penis envy mushrooms for sale
Golden teacher mushrooms for sale
mescaline drug for sale
buy liberty cap mushrooms
buy iboga seeds
buy lsd liquid
what is dmt
what is lsd
buy albino penis envy
what is penis envy
buy kratom near me
buy kratom powder
buy kratom capsules
buy liquid lsd online
buy dmt online
buy pills online
buy legal drugs online
penis envy mushrooms
buy psychedelic drugs USA
buy drugs Europe
ReplyDeleteMarijuana is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
sunrocks vs moonrocks
dank vapes cartridges
marijuana official
brass knuckles vape
buy edibles
buy moon rock weed
buy smart carts online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy marijuana strains
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy dank vapes
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
exotic carts
buy sour diesel weed
buy moonrocks online
buy moonrock weed
mario carts
buy cannabis online
buy sunrocks weed
buy gelato weed
buy ak 47 weed online
vidmate
ReplyDeletebuy-girl-scout-cookies
ReplyDeletebuy-green-crack-online
buy-lemon-haze-online
mario-carts-ghost-og-2
mario-carts-wedding-cake
buy-girl-scout-cookies
ReplyDeletebuy-green-crack-online
buy-lemon-haze-online
mario-carts-ghost-og-2
mario-carts-wedding-cake
buy-girl-scout-cookies
ReplyDeletebuy-green-crack-online
buy-lemon-haze-online
mario-carts-ghost-og-2
mario-carts-wedding-cake
buy-girl-scout-cookies
ReplyDeletebuy-green-crack-online
buy-lemon-haze-online
mario-carts-ghost-og-2
mario-carts-wedding-cake
buy-girl-scout-cookies
ReplyDeletebuy-green-crack-online
buy-lemon-haze-online
mario-carts-ghost-og-2
mario-carts-wedding-cake
buy-girl-scout-cookies
ReplyDeletebuy-green-crack-online
buy-lemon-haze-online
mario-carts-ghost-og-2
mario-carts-wedding-cake
buy-girl-scout-cookies
ReplyDeletebuy-green-crack-online
buy-lemon-haze-online
mario-carts-ghost-og-2
mario-carts-wedding-cake
buy-girl-scout-cookies
ReplyDeletebuy-green-crack-online
buy-lemon-haze-online
mario-carts-ghost-og-2
mario-carts-wedding-cake
Marijuana is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
ReplyDeletesunrocks vs moonrocks
dank vapes cartridges
marijuana official
brass knuckles vape
buy edibles
buy moon rock weed
buy smart carts online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy marijuana strains
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy dank vapes
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
exotic carts
buy sour diesel weed
buy moonrocks online
buy moonrock weed
mario carts
buy cannabis online
buy sunrocks weed
buy gelato weed
buy ak 47 weed online
Marijuana is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
ReplyDeletesunrocks vs moonrocks
dank vapes cartridges
marijuana official
brass knuckles vape
buy edibles
buy moon rock weed
buy smart carts online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy marijuana strains
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy dank vapes
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
exotic carts
buy sour diesel weed
buy moonrocks online
buy moonrock weed
mario carts
buy cannabis online
buy sunrocks weed
buy gelato weed
buy ak 47 weed online
Marijuana is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
ReplyDeletesunrocks vs moonrocks
dank vapes cartridges
marijuana official
brass knuckles vape
buy edibles
buy moon rock weed
buy smart carts online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy marijuana strains
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy dank vapes
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
exotic carts
buy sour diesel weed
buy moonrocks online
buy moonrock weed
mario carts
buy cannabis online
buy sunrocks weed
buy gelato weed
buy ak 47 weed online
Marijuana is a psychoactive drug from the Cannabis plant used for medical or recreational purposes.
ReplyDeletesunrocks vs moonrocks
dank vapes cartridges
marijuana official
brass knuckles vape
buy edibles
buy moon rock weed
buy smart carts online
buy marijuana online
buy white widow weed
buy OG kush weed
where to buy weed online
buy real weed online
buy legal weed online
buy weed online
buy recreational weed online
buy weed seeds online
buy marijuana edibles online
weed strains for sale
buy medical marijuana
buy weed online California
buy medical weed online
stiiizy starter kit
buy marijuana strains
order weed strains
buy weed
buy weed online
buy Strawberry cough weed
buy dank vapes
stiiizy pod
buy cbd oil
best cbd oil
buy marijuana strains
exotic carts
buy sour diesel weed
buy moonrocks online
buy moonrock weed
mario carts
buy cannabis online
buy sunrocks weed
buy gelato weed
buy ak 47 weed online
ReplyDeleteDespite the fact that Adderall is viewed as a physician recommended tranquilize and most patients
buy adderall online,Buy Adderall Uk & USA on the web or purchase Adderall 30mg from an online drug store, a few patients will in general get dependent on the medication.can you buy adderal online? When it comes to buying fine research chemicals online, quality is the key. buychemstore research chemicals for sale ,LSD for sale,constantly strives at providing you with the continuing evaluation, innovation and improvement to quality. We assure you the highest degree of confidence in all of our products not limited to but including cocaine for sale, LSD for sale, heroin for sale, pain medications for sale etc. Here at buychemstore, we pride ourselves on safety.
buy research chemicals online
We are a one-stop-shop for the purchase of anabolic steroids.what is anabolic steroids, We are here to make sure you don’t bother about where to buy anabolic steroids from craigslist, eBay, or any other online forums. We are in contract with a large network of pharmacies in North America, Europe and Asia. With our years of experience in the distribution of anabolic-androgenic steroids, we provide top quality services to our clients that cannot be matched by our competitors.This is te best place to Buy legal steroids online, anabolic steroids for sale
Apetamin vitamin syrup that’s marketed as a weight gain supplement. It was developed by TIL Healthcare PVT, a pharmaceutical company based in India.According to manufacturing labels, 1 teaspoon (5 ml) of Apetamin syrup contains.Apetamin in store,where to buy Apetamin,Is Apetamin syrup Effective in weight gain,buy Apetamin syrup online
Welcom to our vyvanse online shop where you can buy vyvanse online,Buy vyvanse Uk & USA,learn about vyvanse side effects and have
vyvanse coupon,vyvanse for sale.
Buy atorvastatin, sold under the trade name Lipitor among others, is a statin medication used to prevent cardiovascular disease in those at high risk and treat abnormal lipid levels. For the prevention of cardiovascular disease, statins are a first-line treatment. It is taken by mouth.Learn How to use Lipitor, you are free to read about atorvastatin side effects,Buy lipitor UK ,atorvastatin side effects ,
lipitor for sale. You can also buy juul
Do you want to buy counterfeit money thhat looks real with Great Prices and Highest Quality ? Here is your chance to purchase Class A Prop and Replica Bank notes? ? ,buy counterfeit money that looks real. With over a billion of our products circulating around the world, we offer only
ReplyDeleteoriginal high quality COUNTERFEIT currenciesl and fake documents .Shipping from Ukraine and UK.
undetectable Buy Counterfeit Money Bills, Counterfeit Money for sale ,
fake notes for sale.
Welcome to cannabis (CBD) oil online shop where we have cannabis oil for sale,
Buy cannabis oil online . We are the best online store selling legal cannabis (CBD) oil for pain, cannabis (CBD) oil for cancer also called Organic CBD Oil, cannabis (CBD) vape oil, cannabis (CBD) infused coconut oil and much more. We’ve also got cannabis (CBD) oil which can be administered to your pets like cannabis (CBD) oil for dogs and cats. With a vast gallery of cannabis oil and its related products, we offer you the best for your needs.This is Where to Buy Cannabis (CBD) Oil , Buy CBD Tinctures and Extracts ,
buy thc oill
The e-fluid cartridges, or juul pods for sale, arrive in an assortment of flavors like cool mint, creme brulee, classi tobacco,menthol juul , mango-juul,juul starter kit,cucumber juul and natural product mixture, and each unit contains about as much nicotine as one pack of cigarettes. JUUL cases contain a blend of glycerol and propylene glycol, nicotine, benzoic corrosive, and flavorants.click HERE and buy juul pods online from the Official juul website with 100% guarantee.
ReplyDeleteWELCOME TO pug puppies BREEDERS HOME BUY A PUG ONLINE|PUG PUPPIES FOR SALE|ADOPT A PUG ONLINE|PUG|BLACK PUG PUPPIES FOR SALE
We are so glad you stopped by to check out our amazing TEACUP Pug puppies. All of our animals come fully up to date on vaccinations, heart-worm tested negative, and de-wormed, as well as neutered, and treated for any ailments found upon veterinary examination Adopt a teacup Pug puppy
Ownership of a Pug includes a commitment that is wider in scope than providing doggy necessities and allowing this jovial little pet to occupy a portion of your home. Pug ownership is a give-and-take relationship that will continue throughout the little dog’s life. That enjoyable companionship thrives when each member of the pair respects the other and camaraderie rules the union. Your Pug will entertain you, love you, and be obedient and faithful to you if you spend time with your doggy friend.
Adopt a pug puppies online puppy onlie or pug puppies for sale online does not all depends on the money involve. You have to love
Black pug puppies for sale at heart before you go in search of pug puppies for sale or adopt a pug puppy.This means that you have to keep the pug puppy price or cost of a pug puppy or a teacup puppy in mind before you harnest the interest of buying a pug online.
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy weed online
buy marijuana online
marijuana official website
dank carts for sale
buy edibles online
buy moonrock
buy cbd oil online
stiiizy pods
stiiizy starter kit
buy marijuana strains online
dankvapes for sale
buy exotic carts
buy moonrocks online
buy weed online
buy medical marijuana
buy good vapes online
buy real weed
cbd oil for sale
buy cbd edibles online
buy moon rocks
buy sunrocks weed
buy OG kush
buy weed in usa
buy marijuana California
dankvape for sale
buy exotic carts
buy blueberry weed
dank vapes
dank vape cartridges
best place to buy weed online
buy legal marijuana
buy weed stocks
buy weed strains
buy northern lights weed
buy kush online
moonrocks weed
sunrocks vs moonrocks
order marijuana strains
buy dank vapes for sale
best cbd oil
buy good weed
buy white widow weed
russian blue kittens for sale
ReplyDeleteBuy russian blue kittens online
russian blue cats for sale
blu russian kittens for sale
russian blue kittens for adoption
russian blue cat breeders
russian blue for adoption
hypoallergic kittens for sale
russian blue cats for adoption
russian blue kittens
russian blue kittens for sale
where to get russian blue kittens
russian.blue for sale
russian blue cats for sale
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
League Of Legends 10.1 Yama Notları
ReplyDeleteE Spor
League Of Legends
lol oynanış videoları
Karakter Tanıtımı
League Of Legends Counterlar
lol Counterlar
vayne ct
lucian ct
sylas ct
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
League Of Legends 10.1 Yama Notları
ReplyDeleteE Spor
League Of Legends
lol oynanış videoları
Karakter Tanıtımı
League Of Legends Counterlar
lol Counterlar
vayne ct
lucian ct
sylas ct
aphelios ct
Medical marijuana has already been successfully legalized in 23 US states.
ReplyDeleteand California LA is one of the best state where top shelf medical marijuana are been sold at 420cannabisthrives.com
Why? Because there is substantial scientific proof that weed is actually good for you.
In fact, some researchers claim marijuana to be a natural panacea to a large number of diseases.
Email us at scottemassimo@gmail.com for your order process and talk to our experts for advice...
we provide reliable and discreet overnight delivery within 50 states and Canada and our branch in Netherlands is in charge of orders from Europe and Asia....
we provide you with the best buds,cbd oils,thc cartridges,dankwoods,backwoods,cbd massage ceams,cbd capsules......
CALL/TEXT:+12563332189
EMAIL US AT:scottemassimo@gmail.com
cbd-oil-for-sale
buy-cbd-oil-online
buy-vapes-carts-online-2
buy-vapes-carts-online
buy-vape-juice-online
buy-vape-pen-online-3
buy-vape-pen-online-2
buy-stiiizy-pods-online
buy-vape-pen-online
kingpen-carts-for-sale
exotic-carts-for-sale
mario-carts-cartridges-for-sale
barewoods-for-sale
dabwoods-carts-for-sale
backwoods-cigars-for-sale
dankwoods-for-sale
og-kush-seeds-for-sale
where-can-i-buy-packwoods
where-to-buy-gorilla-glue
kush-for-sale
blueberry-kush-for-sale
where-to-buy-gelato
buy-weed-online
buy-real-weed-online-cheap
weed-for-sale
buy-moonrock-online
where-to-buy-kush-in-houston
buy-top-shelf-marijuana-online
420cannabisthrives.com/
we also do give free offers for bulk buy!
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
If you adored this article and also you would like to obtain more info with regards to pulsa dengan paypal i implore you to visit our own website.
ReplyDeletethe art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
buy ibogaine
ReplyDeletebuy ibogaine HCl for sale
buy mdma Pills online
buy changa dmt online
buy morning glory seeds
buy iboga
buy Ayahuasca
buy mescaline
buy Penis envy
buy Penis envy mushrooms for sale
buy Golden teacher mushrooms for sale
mescaline drugs for sale
buy liberty cap mushrooms
buy ibogaine
buy liquid lsd
what is dmt
what is lsd
buy albino penis envy
what is penis envy
kratom near me
buy changa
changa dmt for sale
order mushrooms online
Buy dmt online
buy dmt drug online
ayahuasca for sale
ayahuasca dmt
buy lsd
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
ReplyDeleteThat’s a great article you got the. We are the best marijuana supplier online in the USA,Europe,and UK.We an organised and computerized selling system with modern payment methods,easy and fast delivery,with a modernized packaging system.we have some health products too,this is just the best marijuana site you can find.You can check it out at bestmarijuanaweedsupplier.com.Some of our featured products include;marijuana,vapes,catridges,shatter,hash and many orders
https://www.bestmarijuanaweedsupplier.com/“product/buy-khalifa-kush-online/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/order-mango-haze/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/buy-amnesia-haze-online/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/buy-super-silver-haze-online/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/buy-jack-here/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/gorrila-glue-4/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/gelato/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/ak-47/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/buy-bubble-hash/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/buy-malana-hash-online https://www.bestmarijuanaweedsupplier.com/"product/buy-kootenay-bubble-hash/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/afghan-mazar-sharif-hash/<dofollow https://www.bestmarijuanaweedsupplier.com/"product/buy-charas-hash-online/ <dofollow
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.thank you for thizs article. python online training
ReplyDeletebuy mario carts
ReplyDeletebuy brass knuckles
buy heavy hitters online
live-thc-resin
buy-asteroid-og-strain-a-mysterious-og-kush-hybrid
buy-lavender-kush
buy-skunk-korean-strain
buy-afghani-hawaiian-strain
buy-gelato-strains-online
buy-white-runtz
buy-mario-carts
ReplyDeletebuy-smartbud-cans
buy-space-monkey-meds
buy-packwoods
buy-smart-carts
buy-wax-cigar
buy-cookies
buy-barewoods
buy-cobra-extracts-distillate-cartridge
buy kingpens
ReplyDeletebuy moonrock clear carts
buy plug play pods online
durban poison vapes
heavy hitters online
natural-cbd-oil-2500mg
buy-pure-vape-cartridge-and-thc-oil-i/
sky-high-honey-oil/
live-thc-resin/
diamond-cbd-isolate/
the art of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Marijuana—also called weed, herb, pot, grass, bud, ganja, Mary Jane, and a vast number of other slang terms—is a greenish-gray mixture of the dried flowers of Cannabis sativa.
ReplyDeleteThe main active chemical in marijuana is THC (delta-9-tetrahydrocannabinol), the psychoactive ingredient. The highest concentrations of THC are found in the dried flowers, or buds. When marijuana smoke is inhaled, THC rapidly passes from the lungs into the bloodstream and is carried to the brain and other organs throughout the body. THC from the marijuana acts on specific receptors in the brain, called cannabinoid receptors, starting off a chain of cellular reactions that finally lead to the euphoria, or "high" that users experience. Feeling of a relaxed state, euphoria, and an enhanced sensory perception may occur. With higher THC levels in those who are not used to the effects, some people may feel anxious, paranoid, or have a panic attack.
Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Marijuana—also called weed, herb, pot, grass, bud, ganja, Mary Jane, and a vast number of other slang terms—is a greenish-gray mixture of the dried flowers of Cannabis sativa.
ReplyDeleteThe main active chemical in marijuana is THC (delta-9-tetrahydrocannabinol), the psychoactive ingredient. The highest concentrations of THC are found in the dried flowers, or buds. When marijuana smoke is inhaled, THC rapidly passes from the lungs into the bloodstream and is carried to the brain and other organs throughout the body. THC from the marijuana acts on specific receptors in the brain, called cannabinoid receptors, starting off a chain of cellular reactions that finally lead to the euphoria, or "high" that users experience. Feeling of a relaxed state, euphoria, and an enhanced sensory perception may occur. With higher THC levels in those who are not used to the effects, some people may feel anxious, paranoid, or have a panic attack.
Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
buy-lucky-charms-online/
ReplyDeletebuy-space-monkey-meds-online/
buy-smart-bud-online/
buy-jungle-boys-online/
buy-sexxpot-online/
buy-calikush-online/
ReplyDeleteconnectedcanabisco/
buy-710-kingpen-cartridges-online/
buy-dankwoods-pre-rolls/
buy-alien-vape-cartridge-online/
ReplyDeletebuy-future-pre-rolls-online/
buy-moonrock-prerolls-online/
buy-actavis-prometh/
buy-hi-tech-syrup/">buy-hi-tech-syrup/
Marijuana—also called weed, herb, pot, grass, bud, ganja, Mary Jane, and a vast number of other slang terms—is a greenish-gray mixture of the dried flowers of Cannabis sativa.
ReplyDeleteThe main active chemical in marijuana is THC (delta-9-tetrahydrocannabinol), the psychoactive ingredient. The highest concentrations of THC are found in the dried flowers, or buds. When marijuana smoke is inhaled, THC rapidly passes from the lungs into the bloodstream and is carried to the brain and other organs throughout the body. THC from the marijuana acts on specific receptors in the brain, called cannabinoid receptors, starting off a chain of cellular reactions that finally lead to the euphoria, or "high" that users experience. Feeling of a relaxed state, euphoria, and an enhanced sensory perception may occur. With higher THC levels in those who are not used to the effects, some people may feel anxious, paranoid, or have a panic attack.
Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Marijuana—also called weed, herb, pot, grass, bud, ganja, Mary Jane, and a vast number of other slang terms—is a greenish-gray mixture of the dried flowers of Cannabis sativa.
ReplyDeleteThe main active chemical in marijuana is THC (delta-9-tetrahydrocannabinol), the psychoactive ingredient. The highest concentrations of THC are found in the dried flowers, or buds. When marijuana smoke is inhaled, THC rapidly passes from the lungs into the bloodstream and is carried to the brain and other organs throughout the body. THC from the marijuana acts on specific receptors in the brain, called cannabinoid receptors, starting off a chain of cellular reactions that finally lead to the euphoria, or "high" that users experience. Feeling of a relaxed state, euphoria, and an enhanced sensory perception may occur. With higher THC levels in those who are not used to the effects, some people may feel anxious, paranoid, or have a panic attack.
Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Dank Carts
ReplyDeleteDank Vapes
Dank Cartridges
Dank Vapes Flavors
Dank Vapes
Dank Vapes Official Account
Dank Vapes Cartridges
Dank Vapes For Sale
Dank Vapes Official Account
Dank Vapes
Thc Oil For Sale
Dank Vapes
Thc Vape Oil For Sale
Marijuana—also called weed, herb, pot, grass, bud, ganja, Mary Jane, and a vast number of other slang terms—is a greenish-gray mixture of the dried flowers of Cannabis sativa.
ReplyDeleteThe main active chemical in marijuana is THC (delta-9-tetrahydrocannabinol), the psychoactive ingredient. The highest concentrations of THC are found in the dried flowers, or buds. When marijuana smoke is inhaled, THC rapidly passes from the lungs into the bloodstream and is carried to the brain and other organs throughout the body. THC from the marijuana acts on specific receptors in the brain, called cannabinoid receptors, starting off a chain of cellular reactions that finally lead to the euphoria, or "high" that users experience. Feeling of a relaxed state, euphoria, and an enhanced sensory perception may occur. With higher THC levels in those who are not used to the effects, some people may feel anxious, paranoid, or have a panic attack.
Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
Marijuana—also called weed, herb, pot, grass, bud, ganja, Mary Jane, and a vast number of other slang terms—is a greenish-gray mixture of the dried flowers of Cannabis sativa.
ReplyDeleteThe main active chemical in marijuana is THC (delta-9-tetrahydrocannabinol), the psychoactive ingredient. The highest concentrations of THC are found in the dried flowers, or buds. When marijuana smoke is inhaled, THC rapidly passes from the lungs into the bloodstream and is carried to the brain and other organs throughout the body. THC from the marijuana acts on specific receptors in the brain, called cannabinoid receptors, starting off a chain of cellular reactions that finally lead to the euphoria, or "high" that users experience. Feeling of a relaxed state, euphoria, and an enhanced sensory perception may occur. With higher THC levels in those who are not used to the effects, some people may feel anxious, paranoid, or have a panic attack.
Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy real weed online
how to buy weed online
buy legal weed online
buy recreational weed online
buy weed edibles online
can i buy weed online
buy medical weed online
buy weed online canada
buying weed online reviews
buy weed online legit
buy weed online without medical card
buy weed seeds online canada
order marijuana online
order marijuana seeds online
how to order marijuana online
order marijuana online without a medical card
can you order medical marijuana online
order marijuana online
blue-glitter-juul-wrap
ReplyDeletecucumber-juul
juul-basic-kit
juul-basic-kit-maroon
juul-basic-kit-onyx
slate-juul-device
silver-juul-device
creme-juul
buy juul online
juul pods for sale
buy juul online
buy iboga online
ayahuasca for sale
buy ibogan online
ayahuasca for sale
ayahuasca for sale
purchase ayahuasca
buy ibogan online
purchase ayahuasca
vidmate
ReplyDeleteproduct-category/indica
ReplyDeleteproduct-category/marijuana-strains
buy cannabis online
buy cannabis online
buy edibles online
buy weed online
buy cannabis online
product/buy-og-kush-budder
product/order-runtz-weed-online
buy weed online
order weed online
product/buy-headband-online
best strain for depression
buy white fire og kush online
product-category/hybrid
where can i buy weed online
buy recreational weed online
product/buy-moon-rock-online-premium
product/buy-og-kush-online
order weed online
buy weed online
Thanks For Important Information.
ReplyDeleteGalaxy Aircon
Ac repairing In vadodara
Best Ac Repair In Vadodara
24*7 Emergency Service In Vadodara
Galaxy Aircon
Ac Repairing In Vadodara
Thanks For Important Information. https://galaxyaircon.com/
Brands We Service for AC Repair in Vadodara, Gujarat, India. Carrier-Service-Center-Vadodara. Electrolux-Service-Center-Vadodara. Haier-Service-Center-Vadodara. Hitachi-Service-Center-Vadodara. LG-Service-Center-Vadodara. Mitsubishi-Service-Center-Vadodara. Kelvinator-Service-Center-Vadodara. OGeneral-Service-Center
http://bestacrepair.in/
Noor Aircon
Ac Repairing In Vadodara
Best Ac Repair In Vadodara
Ac Repairing Near Me
https://galaxyaircon.com/
Noor Aircon
Ac Repairing In Vadodara
Thanks For Important Information.
AC Repairing & Installation
Panel Air Conditioner
Precision Air Conditioner
Cassette Air Conditioner
Ductable Air Conditioner
Window Air Conditioner
Split Air Conditioner
Refrigerator Repairing Services
Compact Refrigerator
French Door Refrigerator
Side By Side Refrigerator
Double Door Refrigerator
Single Door Refrigerator
Bottom Freezer Fridge
Top-Freezer Refrigerator
HVAC System
Air Handling Unit
Water Cooler
Deep Freezer
VRF System Repair
Ducting Repair
Air Cooler Repair
Chillier Repair
Electronics Repairing Services
http://bestairtechengineers.com/
Airtech Engineers
Ac Repairing In Vadodara
Best Ac Repair In Vadodara
Ac Repairing Near Me
http://bestairtechengineers.com/
Airtech Engineers
Ac Repairing In Vadodara
Thanks For Important Information.
buy-exotic-carts
ReplyDeletebuy-space-monkey-meds
buy-smartbud-cans
buy-mario-carts
buy-cookies
buy-pure-vape-cartridge-and-thc-oil-i
ReplyDeletebuy-plug-play-pods-online
buy-cobra-extracts-distillate-cartridge
buy-barewoods
buy-runtz
buy-wax-cigar
ReplyDeletebuy-moonrock-clear
buy-king-pens
buy-smart-carts
buy-packwoods
natural-cbd-oil-2500mg
ReplyDeletelive-thc-resin
diamond-cbd-isolate
buy-diamond-shatter-online
buy-heavy-hitters-online
If your asked what is Marijuana what will be your responds. Buy Cannabis oil for sale which is one of the most unusual oil among the oil range. It cures Cancer, Epilepsy, and Insomnia etc.Visit our website for quality strain kushonlinemarket.com
ReplyDeletebuy-blue-dream-online
ReplyDeletebuy-blueberry-kush-online
buy-bubba-kush-online
og-skunk-mario-carts
buy-durban-poison-online
buy-blue-dream-online
ReplyDeletebuy-blueberry-kush-online
buy-bubba-kush-online
og-skunk-mario-carts
buy-durban-poison-online
Healthy blog, thanks for the post. We offer to you
ReplyDeleteMarijunana/Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy weed online
buy real weed online
weed shop
how to buy weed online
shatter
cbd oil
weed bud
edibles
cannabis
buy edibles online ship anywhere
budmail
moon rocks
order marijuana online
buds2go
cheap weed
buy marijuana online
cannabis oil for sale
how to smoke shatter
marijuana for sale
weed for sale
cbd
Healthy blog, thanks for the post. We offer to you
ReplyDeleteMarijunana/Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy weed online
buy real weed online
weed shop
how to buy weed online
shatter
cbd oil
weed bud
edibles
cannabis
buy edibles online ship anywhere
budmail
moon rocks
order marijuana online
buds2go
cheap weed
buy marijuana online
cannabis oil for sale
how to smoke shatter
marijuana for sale
weed for sale
cbd
Healthy blog, thanks for the post. We offer to you
ReplyDeleteMarijunana/Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy weed online
buy real weed online
weed shop
how to buy weed online
shatter
cbd oil
weed bud
edibles
cannabis
buy edibles online ship anywhere
budmail
moon rocks
order marijuana online
buds2go
cheap weed
buy marijuana online
cannabis oil for sale
how to smoke shatter
marijuana for sale
weed for sale
cbd
product-category/indica
ReplyDeleteproduct-category/marijuana-strains
buy cannabis online
buy cannabis online
buy edibles online
buy weed online
buy cannabis online
product/buy-og-kush-budder
product/order-runtz-weed-online
buy weed online
order weed online
product/buy-headband-online
best strain for depression
buy white fire og kush online
product-category/hybrid
where can i buy weed online
buy recreational weed online
product/buy-moon-rock-online-premium
product/buy-og-kush-online
order weed online
buy weed online
I really enjoyed your blog Thanks for sharing such an informative post.
ReplyDeletehttps://www.login4ites.com/
https://myseokhazana.com/
Web Designer in Noida
Best Website Development service In Noida
Website Designing service In Noida
Best digital marketing service In Noida
Best digital marketing Company in Noida
Indian Bookmarking list
Indian Bookmarking list
India Classified Submission List
Indian Classified List
I really enjoyed your blog Thanks for sharing such an informative post.
ReplyDeletehttps://www.login4ites.com/
https://myseokhazana.com/
Web Designer in Noida
Best Website Development service In Noida
Website Designing service In Noida
Best digital marketing service In Noida
Best digital marketing Company in Noida
Indian Bookmarking list
Indian Bookmarking list
India Classified Submission List
Indian Classified List
Healthy blog, thanks for the post. We offer to you
ReplyDeletebuy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil
weed bud
buy marijuana
different types of weed
weed for sale
buy edibles online
moon rocks
order marijuana online
hybrid weed
cheap weed
buy marijuana online
cannabis oil for sale
sativa weed
marijuana for sale
buy edibles online ship anywhere
710 kingpen
buy gorilla glue strain
biscotti strain
thc cartridge
Thanks for provide great informatic and looking beautiful blog, really nice required information & the things i never imagined and i would request, wright more blog and blog post like that for us. Thanks you once agian
ReplyDeletecourt marriage in delhi ncr
court marriage in delhi
court marriage in noida
court marriage in ghaziabad
court marriage in gurgaon
court marriage in faridabad
court marriage in greater noida
name change online
court marriage in chandigarh
court marriage in bangalore
With alot of respect, I give you 5 stars. get buy liquid lsd online, buy lsd liquid, liquid lsd, 4-aco-dmt, 4 aco dmt.
ReplyDeleteTo the attention of others 4-aco-dmt , 4-aco-dmt buy, buy 4-aco-dmt online or lsd
Also, lsd tabs.
Healthy blog, thanks for the post. We offer to you
ReplyDeletebuy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil
weed bud
buy marijuana
different types of weed
weed for sale
buy edibles online
moon rocks
order marijuana online
hybrid weed
cheap weed
buy marijuana online
cannabis oil for sale
sativa weed
marijuana for sale
buy edibles online ship anywhere
710 kingpen
buy gorilla glue strain
biscotti strain
thc cartridge
Cannabis, also known as marijuana among other names, is a psychoactive drug from the Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids
ReplyDeletebuy weed online
buy marijuana online
marijuana official website
dank carts for sale
buy edibles online
buy moonrock
buy cbd oil online
stiiizy pods
stiiizy starter kit
buy marijuana strains online
dankvapes for sale
buy exotic carts
buy moonrocks online
buy weed online
buy medical marijuana
buy good vapes online
buy real weed
cbd oil for sale
buy cbd edibles online
buy moon rocks
buy sunrocks weed
buy OG kush
buy weed in usa
buy marijuana California
dankvape for sale
buy exotic carts
buy blueberry weed
dank vapes
dank vape cartridges
best place to buy weed online
buy legal marijuana
buy weed stocks
buy weed strains
buy northern lights weed
buy kush online
moonrocks weed
sunrocks vs moonrocks
order marijuana strains
buy dank vapes for sale
best cbd oil
buy good weed
buy white widow weed
Healthy blog, thanks for the post. We offer to you
ReplyDeletebuy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil
weed bud
buy marijuana
different types of weed
weed for sale
buy edibles online
moon rocks
order marijuana online
hybrid weed
cheap weed
buy marijuana online
cannabis oil for sale
sativa weed
marijuana for sale
buy edibles online ship anywhere
710 kingpen
buy gorilla glue strain
biscotti strain
thc cartridge
banana kush
where to buy marijuana online
buy dabs online
AK 47 for sale
spacemonkeymeds
cannabis seeds for sale
kingpen gelato
kingpen cartridges
moon rocks weed
Healthy blog, thanks for the post. We offer to you
ReplyDeletebuy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil
weed bud
buy marijuana
different types of weed
weed for sale
buy edibles online
moon rocks
order marijuana online
hybrid weed
cheap weed
buy marijuana online
cannabis oil for sale
sativa weed
marijuana for sale
buy edibles online ship anywhere
710 kingpen
buy gorilla glue strain
biscotti strain
thc cartridge
banana kush
where to buy marijuana online
buy dabs online
AK 47 for sale
spacemonkeymeds
cannabis seeds for sale
kingpen gelato
kingpen cartridges
moon rocks weed
Healthy blog, thanks for the post. We offer to you
ReplyDeletebuy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil
weed bud
buy marijuana
different types of weed
weed for sale
buy edibles online
moon rocks
order marijuana online
hybrid weed
cheap weed
buy marijuana online
cannabis oil for sale
sativa weed
marijuana for sale
buy edibles online ship anywhere
710 kingpen
buy gorilla glue strain
biscotti strain
thc cartridge
banana kush
where to buy marijuana online
buy dabs online
AK 47 for sale
spacemonkeymeds
cannabis seeds for sale
kingpen gelato
kingpen cartridges
moon rocks weed
Healthy blog, thanks for the post. We offer to you
ReplyDeletebuy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil
weed bud
buy marijuana
different types of weed
weed for sale
buy edibles online
moon rocks
order marijuana online
hybrid weed
cheap weed
buy marijuana online
cannabis oil for sale
sativa weed
marijuana for sale
buy edibles online ship anywhere
710 kingpen
buy gorilla glue strain
biscotti strain
thc cartridge
banana kush
where to buy marijuana online
buy dabs online
AK 47 for sale
spacemonkeymeds
cannabis seeds for sale
kingpen gelato
kingpen cartridges
moon rocks weed
thc gummies
buy weed edibles online
cannabis online shop
buy cannabis
purple haze weed
buy weed online usa
Healthy blog, thanks for the post. We offer to you
ReplyDeletebuy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil
weed bud
buy marijuana
different types of weed
weed for sale
buy edibles online
moon rocks
order marijuana online
hybrid weed
cheap weed
buy marijuana online
cannabis oil for sale
sativa weed
marijuana for sale
buy edibles online ship anywhere
710 kingpen
buy gorilla glue strain
biscotti strain
thc cartridge
banana kush
where to buy marijuana online
buy dabs online
AK 47 for sale
spacemonkeymeds
cannabis seeds for sale
kingpen gelato
kingpen cartridges
moon rocks weed
thc gummies
buy weed edibles online
cannabis online shop
buy cannabis
purple haze weed
buy weed online usa
Healthy blog, thanks for the post. We offer to you
ReplyDeletebuy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil
weed bud
buy marijuana
different types of weed
weed for sale
buy edibles online
moon rocks
order marijuana online
hybrid weed
cheap weed
buy marijuana online
cannabis oil for sale
sativa weed
marijuana for sale
buy edibles online ship anywhere
710 kingpen
buy gorilla glue strain
biscotti strain
thc cartridge
banana kush
where to buy marijuana online
buy dabs online
AK 47 for sale
spacemonkeymeds
cannabis seeds for sale
kingpen gelato
kingpen cartridges
moon rocks weed
thc gummies
buy weed edibles online
cannabis online shop
buy cannabis
purple haze weed
buy weed online usa
I think this is one of the most important info for me.And i am glad reading your article. But want to remark on few general things, The site style is good , the articles is really excellent and also check Our Profile for Artificial Intelligence Training.
ReplyDeleteHealthy blog, thanks for the post. We offer to you
Marijuana—also called weed, herb, pot, grass, bud, ganja, Mary Jane, and a vast number of other slang terms—is a greenish-gray mixture of the dried flowers of Cannabis sativa.
The main active chemical in marijuana is THC (delta-9-tetrahydrocannabinol), the psychoactive ingredient. The highest concentrations of THC are found in the dried flowers, or buds.
Marijuana/Cannabis plant used for medical or recreational purposes. The main psychoactive part of cannabis is tetrahydrocannabinol, one of the 483 known compounds in the plant, including at least 65 other cannabinoids.
buy weed online
buy real weed online
weed shop
how to buy weed online
order marijuana online
buy cbd oil