import random # For generating random numbers import sys #To exit the program import pygame #pip install pygame from pygame.locals import * # Global Variables for the game FPS = 32 SCREENWIDTH = 289 SCREENHEIGHT = 511 SCREEN = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT)) GROUNDY = SCREENHEIGHT * 0.8 GAME_SPRITES = {} GAME_SOUNDS = {} PLAYER = 'gallery/sprites/bird.png' BACKGROUND = 'gallery/sprites/background.png' PIPE = 'gallery/sprites/pipe.png' def welcomeScreen(): playerx = int(SCREENWIDTH/5) playery = int((SCREENHEIGHT - GAME_SPRITES['player'].get_height())/2) messagex = int((SCREENWIDTH - GAME_SPRITES['message'].get_width())/2) messagey = int(SCREENHEIGHT*0.13) basex = 0 while True: for event in pygame.event.get(): # if user clicks on cross button, close the game if event.type == QUIT or (event.type==KEYDOWN and event.key == K_ESCAPE): pygame.quit() sys.exit() # If the user presses space or up key, start the game for them elif event.type==KEYDOWN and (event.key==K_SPACE or event.key == K_UP): return else: SCREEN.blit(GAME_SPRITES['background'], (0, 0)) SCREEN.blit(GAME_SPRITES['player'], (playerx, playery)) SCREEN.blit(GAME_SPRITES['message'], (messagex,messagey )) SCREEN.blit(GAME_SPRITES['base'], (basex, GROUNDY)) pygame.display.update() FPSCLOCK.tick(FPS) def mainGame(): score = 0 playerx = int(SCREENWIDTH/5) playery = int(SCREENWIDTH/2) basex = 0 # Create 2 pipes for blitting on the screen newPipe1 = getRandomPipe() newPipe2 = getRandomPipe() # List of upper pipes upperPipes = [ {'x': SCREENWIDTH+200, 'y':newPipe1[0]['y']}, {'x': SCREENWIDTH+200+(SCREENWIDTH/2), 'y':newPipe2[0]['y']}, ] # List of lower pipes lowerPipes = [ {'x': SCREENWIDTH+200, 'y':newPipe1[1]['y']}, {'x': SCREENWIDTH+200+(SCREENWIDTH/2), 'y':newPipe2[1]['y']}, ] pipeVelX = -4 playerVelY = -9 playerMaxVelY = 10 playerMinVelY = -8 playerAccY = 1 playerFlapAccv = -8 # velocity while flapping playerFlapped = False # It is true only when the bird is flapping while True: for event in pygame.event.get(): if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): pygame.quit() sys.exit() if event.type == KEYDOWN and (event.key == K_SPACE or event.key == K_UP): if playery > 0: playerVelY = playerFlapAccv playerFlapped = True GAME_SOUNDS['wing'].play() crashTest = isCollide(playerx, playery, upperPipes, lowerPipes) # This function will return true if the player is crashed if crashTest: return #check for score playerMidPos = playerx + GAME_SPRITES['player'].get_width()/2 for pipe in upperPipes: pipeMidPos = pipe['x'] + GAME_SPRITES['pipe'][0].get_width()/2 if pipeMidPos<= playerMidPos < pipeMidPos +4: score +=1 print(f"Your score is {score}") GAME_SOUNDS['point'].play() if playerVelY <playerMaxVelY and not playerFlapped: playerVelY += playerAccY if playerFlapped: playerFlapped = False playerHeight = GAME_SPRITES['player'].get_height() playery = playery + min(playerVelY, GROUNDY - playery - playerHeight) # Moving Pipes for upperPipe , lowerPipe in zip(upperPipes, lowerPipes): upperPipe['x'] += pipeVelX lowerPipe['x'] += pipeVelX # Adding Pipes if 0<upperPipes[0]['x']<5: newpipe = getRandomPipe() upperPipes.append(newpipe[0]) lowerPipes.append(newpipe[1]) # Removing Pipes if upperPipes[0]['x'] < -GAME_SPRITES['pipe'][0].get_width(): upperPipes.pop(0) lowerPipes.pop(0) # Blitting The Sprites SCREEN.blit(GAME_SPRITES['background'], (0, 0)) for upperPipe, lowerPipe in zip(upperPipes, lowerPipes): SCREEN.blit(GAME_SPRITES['pipe'][0], (upperPipe['x'], upperPipe['y'])) SCREEN.blit(GAME_SPRITES['pipe'][1], (lowerPipe['x'], lowerPipe['y'])) SCREEN.blit(GAME_SPRITES['base'], (basex, GROUNDY)) SCREEN.blit(GAME_SPRITES['player'], (playerx, playery)) myDigits = [int(x) for x in list(str(score))] width = 0 for digit in myDigits: width += GAME_SPRITES['numbers'][digit].get_width() Xoffset = (SCREENWIDTH - width)/2 for digit in myDigits: SCREEN.blit(GAME_SPRITES['numbers'][digit], (Xoffset, SCREENHEIGHT*0.12)) Xoffset += GAME_SPRITES['numbers'][digit].get_width() pygame.display.update() FPSCLOCK.tick(FPS) def isCollide(playerx, playery, upperPipes, lowerPipes): if playery> GROUNDY - 25 or playery<0: GAME_SOUNDS['hit'].play() return True for pipe in upperPipes: pipeHeight = GAME_SPRITES['pipe'][0].get_height() if(playery < pipeHeight + pipe['y'] and abs(playerx - pipe['x']) < GAME_SPRITES['pipe'][0].get_width()): GAME_SOUNDS['hit'].play() return True for pipe in lowerPipes: if (playery + GAME_SPRITES['player'].get_height() > pipe['y']) and abs(playerx - pipe['x']) < GAME_SPRITES['pipe'][0].get_width(): GAME_SOUNDS['hit'].play() return True return False def getRandomPipe(): pipeHeight = GAME_SPRITES['pipe'][0].get_height() offset = SCREENHEIGHT/3 y2 = offset + random.randrange(0, int(SCREENHEIGHT - GAME_SPRITES['base'].get_height() - 1.2 *offset)) pipeX = SCREENWIDTH + 10 y1 = pipeHeight - y2 + offset pipe = [ {'x': pipeX, 'y': -y1}, #upper Pipe {'x': pipeX, 'y': y2} #lower Pipe ] return pipe if __name__ == "__main__": # This will be the main point from where our game will start pygame.init() # Initialize all pygame's modules FPSCLOCK = pygame.time.Clock() pygame.display.set_caption('Flappy Bird by CodeWithHarry') GAME_SPRITES['numbers'] = ( pygame.image.load('gallery/sprites/0.png').convert_alpha(), pygame.image.load('gallery/sprites/1.png').convert_alpha(), pygame.image.load('gallery/sprites/2.png').convert_alpha(), pygame.image.load('gallery/sprites/3.png').convert_alpha(), pygame.image.load('gallery/sprites/4.png').convert_alpha(), pygame.image.load('gallery/sprites/5.png').convert_alpha(), pygame.image.load('gallery/sprites/6.png').convert_alpha(), pygame.image.load('gallery/sprites/7.png').convert_alpha(), pygame.image.load('gallery/sprites/8.png').convert_alpha(), pygame.image.load('gallery/sprites/9.png').convert_alpha(), ) GAME_SPRITES['message'] =pygame.image.load('gallery/sprites/message.png').convert_alpha() GAME_SPRITES['base'] =pygame.image.load('gallery/sprites/base.png').convert_alpha() GAME_SPRITES['pipe'] =(pygame.transform.rotate(pygame.image.load( PIPE).convert_alpha(), 180), pygame.image.load(PIPE).convert_alpha() ) # Game sounds GAME_SOUNDS['die'] = pygame.mixer.Sound('gallery/audio/die.wav') GAME_SOUNDS['hit'] = pygame.mixer.Sound('gallery/audio/hit.wav') GAME_SOUNDS['point'] = pygame.mixer.Sound('gallery/audio/point.wav') GAME_SOUNDS['swoosh'] = pygame.mixer.Sound('gallery/audio/swoosh.wav') GAME_SOUNDS['wing'] = pygame.mixer.Sound('gallery/audio/wing.wav') GAME_SPRITES['background'] = pygame.image.load(BACKGROUND).convert() GAME_SPRITES['player'] = pygame.image.load(PLAYER).convert_alpha() while True: welcomeScreen() mainGame()
Write, Run & Share Jshell code online using OneCompiler's Jshell online compiler for free. It's one of the robust, feature-rich online compilers for Jshell language, running the Jshell version 17. Getting started with the OneCompiler's Jshell editor is easy and fast. The editor shows sample boilerplate code when you choose language as Jshell and start coding.
Jshell is Java’s first official REPL (READ-EVAL-PRINT-LOOP) tool which was introduced in JDK 9 as part of Java Enhancement Proposal. It is suitable to learn the language and also to understand unfamiliar code. With Jshell, you can test the functionality in isolation of a class.
In short, Jshell creates a simple and easy programming environment in the command line which can take input from user, read it and then prints the result.
When you evaluate any valid java expression, the result will be stored in the system defined variables.
You can also create your own variables
// datatype variable name = value;
int age = 16; // example
By default Jshell creates a new VM to run the code which makes the System.in unavialble to use. OneCompiler has a workaround to this by adding --execution local
param. User need to mention this in comments to make use of this option. Following is an example program to demonstrate this
//--execution local
Scanner input = new Scanner(System.in);
System.out.println("Enter your name: ");
String inp = input.next();
System.out.println("Hello, " + inp);
When ever you want to perform a set of operations based on a condition If-Else is used.
Syntax:
if(condition) {
// code when condition true
} else {
// code when condition false
}
Example:
int i = 3
if( i%2 == 0 ) {
System.out.println("Even number");
} else {
System.out.println("Odd number");
}
For loop is used to iterate a set of statements based on a condition. Usually for loop is preferred when number of iterations is known in advance.
Syntax:
for( Initialization; Condition; Increment/decrement ){
//code
}
Example:
for(int i = 1; i <= 10; i++ ){
Systen.out.println(i);
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition){
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);