From d554029f763f22f9c6fd72245361669c90033b9f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 17 Oct 2025 15:12:53 +0000 Subject: [PATCH 01/13] Auto-update INDEX.md with new games [skip ci] --- INDEX.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/INDEX.md b/INDEX.md index c9db9a6..ace33be 100644 --- a/INDEX.md +++ b/INDEX.md @@ -2,9 +2,9 @@ Welcome to Game_Scripts — an open-source collection of mini games! This index automatically tracks all games across different programming languages. -Last updated: Wed Oct 15 20:32:09 UTC 2025 +Last updated: Fri Oct 17 15:12:53 UTC 2025 -Tracked 21 games across 3 languages. +Tracked 26 games across 3 languages. ## 📚 Table of Contents - [Java](#java-games) @@ -19,6 +19,9 @@ A fun game built with core programming concepts ### đŸŽ¯ [Hangman](./Java/Hangman/) 🎮 Hangman GUI Game +### đŸŽ¯ [LogGame](./Java/LogGame/) +A simple Java Swing application that lets users create and manage a live log through an interactive GUI. + ### đŸŽ¯ [MemoryCardGame(GUI)](./Java/MemoryCardGame(GUI)/) 🎮 Memory Card Matching Game (GUI) @@ -28,6 +31,9 @@ A fun game built with core programming concepts ### đŸŽ¯ [PongGameGUI](./Java/PongGameGUI/) 🎮 Pong Game GUI +### đŸŽ¯ [SnakeGame](./Java/SnakeGame/) +Welcome to the VS Code Java world. Here is a guideline to help you get started to write Java code in Visual Studio Code. + ### đŸŽ¯ [TicTacToe](./Java/TicTacToe/) The Number Guessing Game GUI is a simple and interactive game built using Java Swing. @@ -48,6 +54,12 @@ A fun game built with core programming concepts ### đŸŽ¯ [Stopwatch App](./Javascript/Stopwatch App/) A simple yet elegant web-based stopwatch application with start, stop, and reset functionality. +### đŸŽ¯ [Typing Speed Game](./Javascript/Typing Speed Game/) +A fast-paced browser game built with HTML, CSS, and JavaScript. Words fall from the top of the screen — type them before they hit the bottom! Designed to improve typing speed, accuracy, and reflexes. + +### đŸŽ¯ [Weather Site](./Javascript/Weather Site/) +A fun game built with core programming concepts + ## Python Games ### đŸŽ¯ [Brick_Breaker](./Python/Brick_Breaker/) @@ -65,6 +77,9 @@ A fun game built with core programming concepts ### đŸŽ¯ [Snake_Game](./Python/Snake_Game/) - Language: Python +### đŸŽ¯ [snake_game_pygame](./Python/snake_game_pygame/) +🐍 Snake Game – Pygame Edition + ### đŸŽ¯ [Snake_Water_Gun](./Python/Snake_Water_Gun/) By now we have 2 numbers (variables), you and computer From 71b8461da2fc13d3837da5f7bca83670f82d2cf9 Mon Sep 17 00:00:00 2001 From: Sanchit Badyal <128458864+sanchit1804@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:43:54 +0530 Subject: [PATCH 02/13] Implement difficulty levels for typing speed Added difficulty settings to the typing speed game, allowing users to select easy, medium, or hard modes that affect word movement speed, spawn rate, and scoring. --- Javascript/Typing Speed Game/script.js | 68 ++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/Javascript/Typing Speed Game/script.js b/Javascript/Typing Speed Game/script.js index 24f6fe9..bf0406e 100644 --- a/Javascript/Typing Speed Game/script.js +++ b/Javascript/Typing Speed Game/script.js @@ -27,12 +27,71 @@ const startBtn = document.getElementById("startbtn"); const pauseBtn = document.getElementById("pausebtn"); const restartBtn = document.getElementById("restartbtn"); +const easyBtn = document.getElementById("easyBtn"); +const mediumBtn = document.getElementById("mediumBtn"); +const hardBtn = document.getElementById("hardBtn"); + let score = 0; let activeWords = []; let gameInterval; let spawnInterval; let paused = false; let running = false; +let difficulty = "medium"; +let moveSpeed = 50; +let spawnRate = 2000; +let scorePerWord = 2; // default for medium + +// Difficulty setup (speed + spawn rate + points) +function setDifficulty(level) { + difficulty = level; + + switch (level) { + case "easy": + moveSpeed = 75; // slower falling + spawnRate = 2500; // fewer words + scorePerWord = 1; + break; + case "medium": + moveSpeed = 50; + spawnRate = 2000; + scorePerWord = 2; + break; + case "hard": + moveSpeed = 25; // faster falling + spawnRate = 1200; // more words + scorePerWord = 3; + break; + } + + statusElement.textContent = `Difficulty: ${level.toUpperCase()}`; + + // ✅ Restart intervals if game already running + if (running && !paused) { + clearInterval(gameInterval); + clearInterval(spawnInterval); + gameInterval = setInterval(moveWords, moveSpeed); + spawnInterval = setInterval(generateWord, spawnRate); + } + + // ✅ Highlight selected button + highlightDifficulty(level); +} + +// Highlight active difficulty button +function highlightDifficulty(level) { + [easyBtn, mediumBtn, hardBtn].forEach((btn) => + btn.classList.remove("active") + ); + if (level === "easy") easyBtn.classList.add("active"); + if (level === "medium") mediumBtn.classList.add("active"); + if (level === "hard") hardBtn.classList.add("active"); +} + +// Difficulty buttons +easyBtn.addEventListener("click", () => setDifficulty("easy")); +mediumBtn.addEventListener("click", () => setDifficulty("medium")); +hardBtn.addEventListener("click", () => setDifficulty("hard")); function generateWord() { if (!running || paused) return; @@ -75,7 +134,7 @@ input.addEventListener("input", () => { const data = input.value.trim(); activeWords.forEach((word, i) => { if (word.textContent === data) { - score++; + score += scorePerWord; // ✅ Add points based on difficulty scoreElement.textContent = score; wordsContainer.removeChild(word); activeWords.splice(i, 1); @@ -102,8 +161,9 @@ function startGame() { paused = false; pauseBtn.textContent = "Pause"; - gameInterval = setInterval(moveWords, 50); - spawnInterval = setInterval(generateWord, 2000); + // ✅ Use current difficulty settings + gameInterval = setInterval(moveWords, moveSpeed); + spawnInterval = setInterval(generateWord, spawnRate); } function pause() { @@ -133,3 +193,5 @@ startBtn.addEventListener("click", () => { pauseBtn.addEventListener("click", pause); restartBtn.addEventListener("click", restart); + +highlightDifficulty("medium"); From bbdb4e4b915a266281bed2f33958bac75356ee5b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 17 Oct 2025 15:14:04 +0000 Subject: [PATCH 03/13] Auto-update INDEX.md with new games [skip ci] --- INDEX.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INDEX.md b/INDEX.md index ace33be..f87054a 100644 --- a/INDEX.md +++ b/INDEX.md @@ -2,7 +2,7 @@ Welcome to Game_Scripts — an open-source collection of mini games! This index automatically tracks all games across different programming languages. -Last updated: Fri Oct 17 15:12:53 UTC 2025 +Last updated: Fri Oct 17 15:14:04 UTC 2025 Tracked 26 games across 3 languages. From cd83e407ef776475c848d5dc3e2cf57581cdcea1 Mon Sep 17 00:00:00 2001 From: Sanchit Badyal <128458864+sanchit1804@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:44:19 +0530 Subject: [PATCH 04/13] Update heading and difficulty buttons in index.html --- Javascript/Typing Speed Game/index.html | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Javascript/Typing Speed Game/index.html b/Javascript/Typing Speed Game/index.html index e84a22b..ec05296 100644 --- a/Javascript/Typing Speed Game/index.html +++ b/Javascript/Typing Speed Game/index.html @@ -7,8 +7,21 @@ + +

+ 🧠 TYPING GAME 🎮 +

+
-

Typing Speed Game

+

Typing Speed Game

Type the falling words before they reach the bottom.

Each correct word increases your score.

If a word hits the bottom, the game ends.

@@ -30,6 +43,9 @@

Typing Speed Game

+ + +
From 13168ffedac8b350e4505f41271275f601c56df0 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 17 Oct 2025 15:14:27 +0000 Subject: [PATCH 05/13] Auto-update INDEX.md with new games [skip ci] --- INDEX.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INDEX.md b/INDEX.md index f87054a..4abaa84 100644 --- a/INDEX.md +++ b/INDEX.md @@ -2,7 +2,7 @@ Welcome to Game_Scripts — an open-source collection of mini games! This index automatically tracks all games across different programming languages. -Last updated: Fri Oct 17 15:14:04 UTC 2025 +Last updated: Fri Oct 17 15:14:27 UTC 2025 Tracked 26 games across 3 languages. From 8db44d54608ec08e6bf6396d4ccc8e0cbd45bce5 Mon Sep 17 00:00:00 2001 From: Sanchit Badyal <128458864+sanchit1804@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:44:51 +0530 Subject: [PATCH 06/13] Enhance styling for Typing Speed Game --- Javascript/Typing Speed Game/style.css | 130 +++++++++++++++++++++---- 1 file changed, 113 insertions(+), 17 deletions(-) diff --git a/Javascript/Typing Speed Game/style.css b/Javascript/Typing Speed Game/style.css index a25f161..e0170a2 100644 --- a/Javascript/Typing Speed Game/style.css +++ b/Javascript/Typing Speed Game/style.css @@ -1,9 +1,12 @@ body { font-family: Arial, sans-serif; text-align: center; - background: #f0f0f0; margin: 0; padding: 20px; + background: url("image.jp"); + background-size: contain; + background-color: rgb(122, 235, 255); + color: #fff; } .hidden { @@ -11,55 +14,148 @@ body { } #welcomescreen { - margin-top: 100px; + background: #ffffffcc; + padding: 40px 60px; + border-radius: 20px; + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2); + backdrop-filter: blur(8px); + transition: all 0.3s ease; +} + +#welcomescreen h1 { + font-size: 2em; + color: #333; + margin-bottom: 20px; } #gamescreen { max-width: 600px; margin: 0 auto; - background: #fff; - border: 2px solid #333; - border-radius: 8px; - padding: 20px; + background: #ffffffcc; + border-radius: 16px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25); + padding: 25px; + backdrop-filter: blur(8px); } #gamecontainer { width: 100%; height: 300px; - border: 1px solid #ccc; + border: 2px solid #ddd; position: relative; overflow: hidden; - background: #fafafa; + background: linear-gradient(180deg, #f9f9f9, #f0f0f0); + border-radius: 12px; + margin-bottom: 15px; } .word { position: absolute; - font-size: 20px; - font-weight: bold; - color: #333; + font-size: 22px; + font-weight: 700; + color: #4a4a4a; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.15); + animation: float 1.5s ease-in-out infinite alternate; +} + +@keyframes float { + from { + transform: translateY(0); + } + to { + transform: translateY(-4px); + } } #input { - width: 80%; - padding: 10px; + width: 85%; + padding: 12px 14px; font-size: 18px; + border-radius: 8px; + border: 2px solid #764ba2; + outline: none; margin-top: 15px; + transition: all 0.3s ease; +} + +#input:focus { + border-color: #667eea; + box-shadow: 0 0 8px rgba(102, 126, 234, 0.4); } #scoreboard { - margin-top: 10px; + margin-top: 15px; display: flex; justify-content: space-between; font-size: 18px; + color: #333; + font-weight: 600; } #buttons { - margin-top: 10px; + margin-top: 15px; } button { - padding: 8px 16px; - margin: 5px; + padding: 10px 18px; + margin: 6px; font-size: 16px; + border: none; + border-radius: 8px; cursor: pointer; + transition: all 0.3s ease; + font-weight: 600; +} + +#startbtn { + background: #28a745; + color: white; +} +#pausebtn { + background: #ffc107; + color: #222; +} +#restartbtn { + background: #17a2b8; + color: white; +} + +#easyBtn, +#mediumBtn, +#hardBtn { + background: #e0e0e0; + color: #333; + border: 2px solid transparent; +} + +#easyBtn:hover, +#mediumBtn:hover, +#hardBtn:hover { + background: #ddd; +} + +.active { + background: #764ba2 !important; + color: white !important; + border-color: #667eea; +} + +#msg { + margin-top: 10px; + font-weight: 600; + color: #333; + text-shadow: 0 0 1px rgba(0, 0, 0, 0.2); +} + +@media (max-width: 600px) { + #gamescreen { + padding: 15px; + } + #input { + width: 95%; + } + button { + font-size: 14px; + padding: 8px 14px; + } } From 9931dc2449f124f3128f0d643cbc96aebcc8f164 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 17 Oct 2025 15:15:00 +0000 Subject: [PATCH 07/13] Auto-update INDEX.md with new games [skip ci] --- INDEX.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INDEX.md b/INDEX.md index 4abaa84..c29b837 100644 --- a/INDEX.md +++ b/INDEX.md @@ -2,7 +2,7 @@ Welcome to Game_Scripts — an open-source collection of mini games! This index automatically tracks all games across different programming languages. -Last updated: Fri Oct 17 15:14:27 UTC 2025 +Last updated: Fri Oct 17 15:15:00 UTC 2025 Tracked 26 games across 3 languages. From 034028e30d82b255d97fe3719d085929b3d8dbc6 Mon Sep 17 00:00:00 2001 From: Sanchit Badyal <128458864+sanchit1804@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:45:18 +0530 Subject: [PATCH 08/13] Update README with new features and gameplay details --- Javascript/Typing Speed Game/README.md | 55 +++++++++++++------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/Javascript/Typing Speed Game/README.md b/Javascript/Typing Speed Game/README.md index a01c123..14929e8 100644 --- a/Javascript/Typing Speed Game/README.md +++ b/Javascript/Typing Speed Game/README.md @@ -1,42 +1,41 @@ -# đŸ•šī¸ Typing Speed Game +đŸ•šī¸ Typing Speed Game A fast-paced browser game built with HTML, CSS, and JavaScript. Words fall from the top of the screen — type them before they hit the bottom! Designed to improve typing speed, accuracy, and reflexes. ---- +🚀 Features -## 🚀 Features +🎮 Welcome screen with instructions and Start button -- 🎮 Welcome screen with instructions and Start button -- âŒ¨ī¸ Real-time typing input and word matching -- 🧠 Score tracking and game-over detection -- â¸ī¸ Pause and resume functionality -- 🔄 Restart button to replay instantly -- 🧱 Responsive layout for desktop and mobile +âŒ¨ī¸ Real-time typing input and word matching ---- +🧠 Score tracking and game-over detection -## đŸ“Ļ Tech Stack +â¸ī¸ Pause and resume functionality -- **HTML**: Structure and layout -- **CSS**: Styling and responsive design -- **JavaScript**: Game logic, animation, and input handling +🔄 Restart button to replay instantly ---- +🧱 Responsive layout for desktop and mobile -## 📸 Gameplay Preview +⚡ Difficulty Settings: Easy, Medium, Hard -> Words fall from the top. Type them quickly to score points. -> If a word reaches the bottom, the game ends. -> You can pause and restart anytime. +Easy: slower words, +1 point per correct word ---- +Medium: medium speed, +2 points per correct word -## đŸ› ī¸ How to Run +Hard: faster words, +3 points per correct word -1. Clone the repository: - ```bash - git clone https://github.com/devmalik7/Game_Scripts.git - cd Javascript - cd "Typing Speed Game" - ``` -2. Run **index.md** in your browser. +đŸ“Ļ Tech Stack + +HTML: Structure and layout + +CSS: Styling and responsive design + +JavaScript: Game logic, animation, input handling, and difficulty levels + +📸 Gameplay Preview + +Words fall from the top. Type them quickly to score points. +If a word reaches the bottom, the game ends. +You can pause, restart, and select difficulty anytime. + +Select a difficulty (Easy, Medium, Hard) and start typing! From 6de135ad3ea30f7edd16e99b94540703981caaf0 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 17 Oct 2025 15:15:28 +0000 Subject: [PATCH 09/13] Auto-update INDEX.md with new games [skip ci] --- INDEX.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INDEX.md b/INDEX.md index c29b837..a2b4309 100644 --- a/INDEX.md +++ b/INDEX.md @@ -2,7 +2,7 @@ Welcome to Game_Scripts — an open-source collection of mini games! This index automatically tracks all games across different programming languages. -Last updated: Fri Oct 17 15:15:00 UTC 2025 +Last updated: Fri Oct 17 15:15:28 UTC 2025 Tracked 26 games across 3 languages. @@ -55,7 +55,7 @@ A fun game built with core programming concepts A simple yet elegant web-based stopwatch application with start, stop, and reset functionality. ### đŸŽ¯ [Typing Speed Game](./Javascript/Typing Speed Game/) -A fast-paced browser game built with HTML, CSS, and JavaScript. Words fall from the top of the screen — type them before they hit the bottom! Designed to improve typing speed, accuracy, and reflexes. +đŸ•šī¸ Typing Speed Game ### đŸŽ¯ [Weather Site](./Javascript/Weather Site/) A fun game built with core programming concepts From 19e9d29bb2e88cd806de42c5d212031c2d842c94 Mon Sep 17 00:00:00 2001 From: Sanchit Badyal <128458864+sanchit1804@users.noreply.github.com> Date: Mon, 20 Oct 2025 10:03:28 +0530 Subject: [PATCH 10/13] FlappyBird --- Java/FlappyBird/App.java | 21 +++ Java/FlappyBird/FlappyBird.java | 215 +++++++++++++++++++++++++++++++ Java/FlappyBird/README.md | 2 + Java/FlappyBird/bottompipe.png | Bin 0 -> 13924 bytes Java/FlappyBird/flappybird.png | Bin 0 -> 1501 bytes Java/FlappyBird/flappybirdbg.png | Bin 0 -> 62893 bytes Java/FlappyBird/toppipe.png | Bin 0 -> 13787 bytes 7 files changed, 238 insertions(+) create mode 100644 Java/FlappyBird/App.java create mode 100644 Java/FlappyBird/FlappyBird.java create mode 100644 Java/FlappyBird/README.md create mode 100644 Java/FlappyBird/bottompipe.png create mode 100644 Java/FlappyBird/flappybird.png create mode 100644 Java/FlappyBird/flappybirdbg.png create mode 100644 Java/FlappyBird/toppipe.png diff --git a/Java/FlappyBird/App.java b/Java/FlappyBird/App.java new file mode 100644 index 0000000..948f0b0 --- /dev/null +++ b/Java/FlappyBird/App.java @@ -0,0 +1,21 @@ +import javax.swing.*; + +public class App { + public static void main(String[] args) throws Exception { + int boardWidth = 360; + int boardHeight = 640; + + JFrame frame = new JFrame("Flappy Bird"); + // frame.setVisible(true); + frame.setSize(boardWidth, boardHeight); + frame.setLocationRelativeTo(null); + frame.setResizable(false); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + FlappyBird flappyBird = new FlappyBird(); + frame.add(flappyBird); + frame.pack(); + flappyBird.requestFocus(); + frame.setVisible(true); + } +} diff --git a/Java/FlappyBird/FlappyBird.java b/Java/FlappyBird/FlappyBird.java new file mode 100644 index 0000000..a7a6439 --- /dev/null +++ b/Java/FlappyBird/FlappyBird.java @@ -0,0 +1,215 @@ +import java.awt.*; +import java.awt.event.*; +import java.util.ArrayList; +import java.util.Random; +import javax.swing.*; + +public class FlappyBird extends JPanel implements ActionListener, KeyListener { + int boardWidth = 360; + int boardHeight = 640; + + // images + Image backgroundImg; + Image birdImg; + Image topPipeImg; + Image bottomPipeImg; + + // bird class + int birdX = boardWidth / 8; + int birdY = boardHeight / 2; + int birdWidth = 34; + int birdHeight = 24; + + class Bird { + int x = birdX; + int y = birdY; + int width = birdWidth; + int height = birdHeight; + Image img; + + Bird(Image img) { + this.img = img; + } + } + + // pipe class + int pipeX = boardWidth; + int pipeY = 0; + int pipeWidth = 64; // scaled by 1/6 + int pipeHeight = 512; + + class Pipe { + int x = pipeX; + int y = pipeY; + int width = pipeWidth; + int height = pipeHeight; + Image img; + boolean passed = false; + + Pipe(Image img) { + this.img = img; + } + } + + // game logic + Bird bird; + int velocityX = -4; // move pipes to the left speed (simulates bird moving right) + int velocityY = 0; // move bird up/down speed. + int gravity = 1; + + ArrayList pipes; + Random random = new Random(); + + Timer gameLoop; + Timer placePipeTimer; + boolean gameOver = false; + double score = 0; + + FlappyBird() { + setPreferredSize(new Dimension(boardWidth, boardHeight)); + // setBackground(Color.blue); + setFocusable(true); + addKeyListener(this); + + // load images + backgroundImg = new ImageIcon(getClass().getResource("./flappybirdbg.png")).getImage(); + birdImg = new ImageIcon(getClass().getResource("./flappybird.png")).getImage(); + topPipeImg = new ImageIcon(getClass().getResource("./toppipe.png")).getImage(); + bottomPipeImg = new ImageIcon(getClass().getResource("./bottompipe.png")).getImage(); + + // bird + bird = new Bird(birdImg); + pipes = new ArrayList(); + + // place pipes timer + placePipeTimer = new Timer(1500, new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // Code to be executed + placePipes(); + } + }); + placePipeTimer.start(); + + // game timer + gameLoop = new Timer(1000 / 60, this); // how long it takes to start timer, milliseconds gone between frames + gameLoop.start(); + } + + void placePipes() { + // (0-1) * pipeHeight/2. + // 0 -> -128 (pipeHeight/4) + // 1 -> -128 - 256 (pipeHeight/4 - pipeHeight/2) = -3/4 pipeHeight + int randomPipeY = (int) (pipeY - pipeHeight / 4 - Math.random() * (pipeHeight / 2)); + int openingSpace = boardHeight / 4; + + Pipe topPipe = new Pipe(topPipeImg); + topPipe.y = randomPipeY; + pipes.add(topPipe); + + Pipe bottomPipe = new Pipe(bottomPipeImg); + bottomPipe.y = topPipe.y + pipeHeight + openingSpace; + pipes.add(bottomPipe); + } + + public void paintComponent(Graphics g) { + super.paintComponent(g); + draw(g); + } + + public void draw(Graphics g) { + // background + g.drawImage(backgroundImg, 0, 0, this.boardWidth, this.boardHeight, null); + + // bird + g.drawImage(birdImg, bird.x, bird.y, bird.width, bird.height, null); + + // pipes + for (int i = 0; i < pipes.size(); i++) { + Pipe pipe = pipes.get(i); + g.drawImage(pipe.img, pipe.x, pipe.y, pipe.width, pipe.height, null); + } + + // score + g.setColor(Color.white); + + g.setFont(new Font("Arial", Font.PLAIN, 32)); + if (gameOver) { + g.drawString("Game Over: " + String.valueOf((int) score), 10, 35); + } else { + g.drawString(String.valueOf((int) score), 10, 35); + } + + } + + public void move() { + // bird + velocityY += gravity; + bird.y += velocityY; + bird.y = Math.max(bird.y, 0); // apply gravity to current bird.y, limit the bird.y to top of the canvas + + // pipes + for (int i = 0; i < pipes.size(); i++) { + Pipe pipe = pipes.get(i); + pipe.x += velocityX; + + if (!pipe.passed && bird.x > pipe.x + pipe.width) { + score += 0.5; // 0.5 because there are 2 pipes! so 0.5*2 = 1, 1 for each set of pipes + pipe.passed = true; + } + + if (collision(bird, pipe)) { + gameOver = true; + } + } + + if (bird.y > boardHeight) { + gameOver = true; + } + } + + boolean collision(Bird a, Pipe b) { + return a.x < b.x + b.width && // a's top left corner doesn't reach b's top right corner + a.x + a.width > b.x && // a's top right corner passes b's top left corner + a.y < b.y + b.height && // a's top left corner doesn't reach b's bottom left corner + a.y + a.height > b.y; // a's bottom left corner passes b's top left corner + } + + @Override + public void actionPerformed(ActionEvent e) { // called every x milliseconds by gameLoop timer + move(); + repaint(); + if (gameOver) { + placePipeTimer.stop(); + gameLoop.stop(); + } + } + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_SPACE) { + // System.out.println("JUMP!"); + velocityY = -10; + + if (gameOver) { + // restart game by resetting conditions + bird.y = birdY; + velocityY = 0; + pipes.clear(); + gameOver = false; + score = 0; + gameLoop.start(); + placePipeTimer.start(); + } + } + } + + // not needed + @Override + public void keyTyped(KeyEvent e) { + } + + @Override + public void keyReleased(KeyEvent e) { + } +} diff --git a/Java/FlappyBird/README.md b/Java/FlappyBird/README.md new file mode 100644 index 0000000..d72cccb --- /dev/null +++ b/Java/FlappyBird/README.md @@ -0,0 +1,2 @@ +# FlappyBird +FlappyBird Game diff --git a/Java/FlappyBird/bottompipe.png b/Java/FlappyBird/bottompipe.png new file mode 100644 index 0000000000000000000000000000000000000000..2c57b32ab1b1556d0c3dff85140856b836a2be6c GIT binary patch literal 13924 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%0DjvIreViy3XMbocN>840F^yHt*YCCfo-6#C!FY8 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 It6&xOKN4!j`v3p{ literal 0 HcmV?d00001 diff --git a/Java/FlappyBird/toppipe.png b/Java/FlappyBird/toppipe.png new file mode 100644 index 0000000000000000000000000000000000000000..8b0a96757dc5e6f2c90c639d82b0a45cd8a8bbc0 GIT binary patch literal 13787 zcmeI3Ur19?9LLXHo2W~(41*|?Kn-j}4@Q5?J7wV(XeJSbq*+p$E)795%RA~J!-oZi zhNv4AC`c})W`sILL^5lJhT4>oma}5oa{lS=ZtHB`YkP=IUwZmI9Ddxv9p}&Ye9rg& zIKTU;DM>+rI|C6yK{BZ%4Ix5-&}QWChkr4syBl#Jiqeu2QOo;X-|z$fNT)y+5S=u+FH{iCi%wRGEI(VO(P8i&%MqB4kztw^z#Ko#4(gaJ9x*|ys% z*D8v~d9T|9{O&j(Z{UAxnh1L!4^P?XJ3}#s1mk64PK`(%lP*Ssp{0`LHM;IsgE06chVVU?1Qdw|@-S_&3&50HECNXLVF0QcZ|VgMch4}b@kU-;`J z!9A?a2H*kk;IT8nJ%D=v_u#Q1*n_mhf=_9~Yb!SQ79dyD!DZGxhm|Jp;GeP~W}59Uf5{cyz8IUVHb@IFIfe(qIp`z2px*fR9@V(CzJBy3cT1ELMtzs1?E0J2IHD5YfQ6*9vD@E$eBHo%+WY_$k!6gJuzU^m8o4{Ju zDzN6Ic+r7}M#yWz*+#i-EO;tgIJp44<7!RuFTn4vRq zaZ>U+hpA5&Q_R~X|L&94e$uE_u5*wL?FzKww?2(MrI=|auP68G@TM=7S8+iWk{wTx Jv?N}*^9PO}41xdv literal 0 HcmV?d00001 From 3383419c86be54f690805800b07f6e151a65ba7e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 20 Oct 2025 04:33:38 +0000 Subject: [PATCH 11/13] Auto-update INDEX.md with new games [skip ci] --- INDEX.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/INDEX.md b/INDEX.md index a2b4309..081dc46 100644 --- a/INDEX.md +++ b/INDEX.md @@ -2,9 +2,9 @@ Welcome to Game_Scripts — an open-source collection of mini games! This index automatically tracks all games across different programming languages. -Last updated: Fri Oct 17 15:15:28 UTC 2025 +Last updated: Mon Oct 20 04:33:38 UTC 2025 -Tracked 26 games across 3 languages. +Tracked 27 games across 3 languages. ## 📚 Table of Contents - [Java](#java-games) @@ -16,6 +16,9 @@ Tracked 26 games across 3 languages. ### đŸŽ¯ [BrickBreakingGame](./Java/BrickBreakingGame/) A fun game built with core programming concepts +### đŸŽ¯ [FlappyBird](./Java/FlappyBird/) +FlappyBird Game + ### đŸŽ¯ [Hangman](./Java/Hangman/) 🎮 Hangman GUI Game From 5215e27022edb3f12782baf3bffb6f42173353e5 Mon Sep 17 00:00:00 2001 From: Sanchit Badyal <128458864+sanchit1804@users.noreply.github.com> Date: Wed, 22 Oct 2025 01:09:55 +0530 Subject: [PATCH 12/13] Refactor GitHub Actions workflow for index update --- .github/workflows/update-index.yml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/update-index.yml b/.github/workflows/update-index.yml index 94e8ed2..c5fc7bf 100644 --- a/.github/workflows/update-index.yml +++ b/.github/workflows/update-index.yml @@ -1,4 +1,5 @@ name: Update Game Index + on: push: branches: [ main, master ] @@ -8,28 +9,32 @@ on: jobs: update-index: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v3 + - name: Checkout repository + uses: actions/checkout@v3 with: token: ${{ secrets.GITHUB_TOKEN }} - + fetch-depth: 0 # Important for pushing commits back + - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.x' - + - name: Update INDEX.md run: | python update_index.py - - - name: Commit changes + + - name: Commit and push changes run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add INDEX.md + if [[ -n "$(git status --porcelain INDEX.md)" ]]; then git commit -m "Auto-update INDEX.md with new games [skip ci]" - git push + git push origin HEAD:${GITHUB_REF#refs/heads/} else echo "No changes to INDEX.md" fi From 02605e3d80396dd084d4aa397214201e5481587f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 21 Oct 2025 19:40:09 +0000 Subject: [PATCH 13/13] Auto-update INDEX.md with new games [skip ci] --- INDEX.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INDEX.md b/INDEX.md index 081dc46..49bb9d5 100644 --- a/INDEX.md +++ b/INDEX.md @@ -2,7 +2,7 @@ Welcome to Game_Scripts — an open-source collection of mini games! This index automatically tracks all games across different programming languages. -Last updated: Mon Oct 20 04:33:38 UTC 2025 +Last updated: Tue Oct 21 19:40:09 UTC 2025 Tracked 27 games across 3 languages.