با نام و یاد خدا و عرض سلام خدمت یاران همیشگی اپده ، اولین برنامه ساز و بازی ساز اندروید آنلاین ایرانی.

امروز می خوایم یه بازی ساده با اپده بسازیم.شما اگه HTML بلد باشی بازی هایی که با این زبان نوشته می شه رو می تونی بسازی،ولی اگه بلد هم نیستی می تونی از کد آماده ی ما استفاده کنی و بازی دلخواهت رو بسازی و با کمک ما گسترشش بدی.

امروز می خوایم یه بازی تنیس رو بسازیم که عکسش رو پایین مشاهده می کنید(روش کلیک کنید) :

 پیشنمایش بازی  پیشنمایش بازی   پیشنمایش بازی


کافیه که به صفحه ی نخست اپده بری و برای برنامت اسم بذاری و بعد کد زیر رو وارد کنی :

<canvas id="canvas"></canvas>
<style>body {padding: 0; margin: 0; overflow: hidden;}</style>
<script>// RequestAnimFrame: a browser API for getting smooth animations
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( callback ){
return window.setTimeout(callback, 1000 / 60);
};
})();

window.cancelRequestAnimFrame = ( function() {
return window.cancelAnimationFrame ||
window.webkitCancelRequestAnimationFrame ||
window.mozCancelRequestAnimationFrame ||
window.oCancelRequestAnimationFrame ||
window.msCancelRequestAnimationFrame ||
clearTimeout
} )();


// Initialize canvas and required variables
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"), // Create canvas context
W = window.innerWidth, // Window's width
H = window.innerHeight, // Window's height
particles = [], // Array containing particles
ball = {}, // Ball object
paddles = [2], // Array containing two paddles
mouse = {}, // Mouse object to store it's current position
points = 0, // Varialbe to store points
fps = 60, // Max FPS (frames per second)
particlesCount = 20, // Number of sparks when ball strikes the paddle
flag = 0, // Flag variable which is changed on collision
particlePos = {}, // Object to contain the position of collision
multipler = 1, // Varialbe to control the direction of sparks
startBtn = {}, // Start button object
restartBtn = {}, // Restart button object
over = 0, // flag varialbe, cahnged when the game is over
init, // variable to initialize animation
paddleHit;

// Add mousemove and mousedown events to the canvas
canvas.addEventListener("mousemove", trackPosition, true);
canvas.addEventListener("mousedown", btnClick, true);

// Initialise the collision sound
collision = document.getElementById("collide");

// Set the canvas's height and width to full screen
canvas.width = W;
canvas.height = H;

// Function to paint canvas
function paintCanvas() {
ctx.fillStyle = "#FAEBD7";
ctx.fillRect(0, 0, W, H);
}

// Function for creating paddles
function Paddle(pos) {
// Height and width
this.h = 5;
this.w = 150;

// Paddle's position
this.x = W/2 - this.w/2;
this.y = (pos == "top") ? 0 : H - this.h;

}

// Push two new paddles into the paddles[] array
paddles.push(new Paddle("bottom"));
paddles.push(new Paddle("top"));

// Ball object
ball = {
x: 50,
y: 50,
r: 5,
c: "black",
vx: 4,
vy: 8,

// Function for drawing ball on canvas
draw: function() {
ctx.beginPath();
ctx.fillStyle = this.c;
ctx.arc(this.x, this.y, this.r, 0, Math.PI*2, false);
ctx.fill();
}
};


// Start Button object
startBtn = {
w: 100,
h: 50,
x: W/2 - 50,
y: H/2 - 25,

draw: function() {
ctx.strokeStyle = "black";
ctx.lineWidth = "5";
ctx.strokeRect(this.x, this.y, this.w, this.h);

ctx.font = "18px Arial, sans-serif";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.fillStlye = "black";
ctx.fillText("بسم الله", W/2, H/2 );
}
};

// Restart Button object
restartBtn = {
w: 100,
h: 50,
x: W/2 - 50,
y: H/2 - 50,

draw: function() {
ctx.strokeStyle = "black";
ctx.lineWidth = "2";
ctx.strokeRect(this.x, this.y, this.w, this.h);

ctx.font = "14px Arial, sans-serif";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.fillStlye = "black";
ctx.fillText("دوباره تلاش کن", W/2, H/2 - 25 );
}
};

// Function for creating particles object
function createParticles(x, y, m) {
this.x = x || 0;
this.y = y || 0;

this.radius = 1.2;

this.vx = -1.5 + Math.random()*3;
this.vy = m * Math.random()*1.5;
}

// Draw everything on canvas
function draw() {
paintCanvas();
for(var i = 0; i < paddles.length; i++) {
p = paddles[i];

ctx.fillStyle = "black";
ctx.fillRect(p.x, p.y, p.w, p.h);
}

ball.draw();
update();
}

// Function to increase speed after every 5 points
function increaseSpd() {
if(points % 4 == 0) {
if(Math.abs(ball.vx) < 15) {
ball.vx += (ball.vx < 0) ? -1 : 1;
ball.vy += (ball.vy < 0) ? -2 : 2;
}
}
}

// Track the position of mouse cursor
function trackPosition(e) {
mouse.x = e.pageX;
mouse.y = e.pageY;
}

// Function to update positions, score and everything.
// Basically, the main game logic is defined here
function update() {

// Update scores
updateScore();

// Move the paddles on mouse move
if(mouse.x && mouse.y) {
for(var i = 1; i < paddles.length; i++) {
p = paddles[i];
p.x = mouse.x - p.w/2;
}
}

// Move the ball
ball.x += ball.vx;
ball.y += ball.vy;

// Collision with paddles
p1 = paddles[1];
p2 = paddles[2];

// If the ball strikes with paddles,
// invert the y-velocity vector of ball,
// increment the points, play the collision sound,
// save collision's position so that sparks can be
// emitted from that position, set the flag variable,
// and change the multiplier
if(collides(ball, p1)) {
collideAction(ball, p1);
}


else if(collides(ball, p2)) {
collideAction(ball, p2);
}

else {
// Collide with walls, If the ball hits the top/bottom,
// walls, run gameOver() function
if(ball.y + ball.r > H) {
ball.y = H - ball.r;
gameOver();
}

else if(ball.y < 0) {
ball.y = ball.r;
gameOver();
}

// If ball strikes the vertical walls, invert the
// x-velocity vector of ball
if(ball.x + ball.r > W) {
ball.vx = -ball.vx;
ball.x = W - ball.r;
}

else if(ball.x -ball.r < 0) {
ball.vx = -ball.vx;
ball.x = ball.r;
}
}



// If flag is set, push the particles
if(flag == 1) {
for(var k = 0; k < particlesCount; k++) {
particles.push(new createParticles(particlePos.x, particlePos.y, multiplier));
}
}

// Emit particles/sparks
emitParticles();

// reset flag
flag = 0;
}

//Function to check collision between ball and one of
//the paddles
function collides(b, p) {
if(b.x + ball.r >= p.x && b.x - ball.r <=p.x + p.w) {
if(b.y >= (p.y - p.h) && p.y > 0){
paddleHit = 1;
return true;
}

else if(b.y <= p.h && p.y == 0) {
paddleHit = 2;
return true;
}

else return false;
}
}

//Do this when collides == true
function collideAction(ball, p) {
ball.vy = -ball.vy;

if(paddleHit == 1) {
ball.y = p.y - p.h;
particlePos.y = ball.y + ball.r;
multiplier = -1;
}

else if(paddleHit == 2) {
ball.y = p.h + ball.r;
particlePos.y = ball.y - ball.r;
multiplier = 1;
}

points++;
increaseSpd();

if(collision) {
if(points > 0)
collision.pause();

collision.currentTime = 0;
collision.play();
}

particlePos.x = ball.x;
flag = 1;
}

// Function for emitting particles
function emitParticles() {
for(var j = 0; j < particles.length; j++) {
par = particles[j];

ctx.beginPath();
ctx.fillStyle = "black";
if (par.radius > 0) {
ctx.arc(par.x, par.y, par.radius, 0, Math.PI*2, false);
}
ctx.fill();

par.x += par.vx;
par.y += par.vy;

// Reduce radius so that the particles die after a few seconds
par.radius = Math.max(par.radius - 0.05, 0.0);

}
}

// Function for updating score
function updateScore() {
ctx.fillStlye = "black";
ctx.font = "16px Arial, sans-serif";
ctx.textAlign = "left";
ctx.textBaseline = "top";
ctx.fillText(+ points, 20, 20 );
}

// Function to run when the game overs
function gameOver() {
ctx.fillStlye = "black";
ctx.font = "20px Arial, sans-serif";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
ctx.fillText("هر شکست مقدمه ی یک پیروزی بزرگ است.امتیاز شما : "+points+"", W/2, H/2 + 25 );

// Stop the Animation
cancelRequestAnimFrame(init);

// Set the over flag
over = 1;

// Show the restart button
restartBtn.draw();
}

// Function for running the whole animation
function animloop() {
init = requestAnimFrame(animloop);
draw();
}

// Function to execute at startup
function startScreen() {
draw();
startBtn.draw();
}

// On button click (Restart and start)
function btnClick(e) {

// Variables for storing mouse position on click
var mx = e.pageX,
my = e.pageY;

// Click start button
if(mx >= startBtn.x && mx <= startBtn.x + startBtn.w) {
animloop();

// Delete the start button after clicking it
startBtn = {};
}

// If the game is over, and the restart button is clicked
if(over == 1) {
if(mx >= restartBtn.x && mx <= restartBtn.x + restartBtn.w) {
ball.x = 20;
ball.y = 20;
points = 0;
ball.vx = 4;
ball.vy = 8;
animloop();

over = 0;
}
}
}

// Show the start screen
startScreen();</script>

حالا روی دکمه ی جادویی ساخت برنامه کلیک کن.تبریک می گم اولین بازی اندرویدت رو ساختی برو حالشو ببر.

اگه می خوای بازی ساخته شده رو گسترش بدی می تونی از ما کمک بگیری و تو بخش نظرات رایگان به پرسشهات پاسخ می دیم.

التماس دعا