-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ai flappy bird clone.html
121 lines (110 loc) · 4.55 KB
/
ai flappy bird clone.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<html>
<head>
<script>
document.addEventListener("DOMContentLoaded", function() {
var canvas = document.createElement('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
document.body.appendChild(canvas);
var ctx = canvas.getContext('2d');
var bird = {
x: 100,
y: 100,
width: 20,
height: 20,
gravity: 0.5,
velocity: 0,
jump: -5,
update: function() {
this.velocity += this.gravity;
this.y += this.velocity;
if (this.y > canvas.height - this.height) {
this.y = canvas.height - this.height;
this.velocity = 0;
}
if (this.y < 0) {
this.y = 0;
this.velocity = 0;
}
},
draw: function() {
ctx.fillStyle = '#ff0000';
ctx.fillRect(this.x, this.y, this.width, this.height);
}
};
var pipes = [];
var pipeWidth = 50;
var pipeGap = 100;
var pipeSpeed = -2;
var pipeInterval = 100;
var pipeTimer = 0;
function updatePipes() {
if (pipeTimer == 0) {
pipes.push({
x: canvas.width,
y: 0,
width: pipeWidth,
height: Math.random() * canvas.height
});
pipes.push({
x: canvas.width,
y: pipes[pipes.length - 1].height + pipeGap,
width: pipeWidth,
height: canvas.height - (pipes[pipes.length - 1].height + pipeGap)
});
}
pipeTimer++;
pipeTimer %= pipeInterval;
for (var i = 0; i < pipes.length; i++) {
pipes[i].x += pipeSpeed;
if (pipes[i].x < -pipes[i].width) {
pipes.splice(i, 1);
i--;
}
}
}
function drawPipes() {
for (var i = 0; i < pipes.length; i++) {
ctx.fillStyle = '#00ff00';
ctx.fillRect(pipes[i].x, pipes[i].y, pipes[i].width, pipes[i].height);
}
}
function update() {
bird.update();
updatePipes();
for (var i = 0; i < pipes.length; i++) {
if (bird.x + bird.width > pipes[i].x && bird.x < pipes[i].x + pipes[i].width && bird.y + bird.height > pipes[i].y && bird.y < pipes[i].y + pipes[i].height) {
alert('You lose!');
location.reload();
}
}
}
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
bird.draw();
drawPipes();
}
function loop() {
update();
draw();
requestAnimationFrame(loop);
}
document.body.onkeydown = function(e) {
if (e.keyCode == 32) {
bird.velocity = bird.jump;
}
};
loop();
});
</script>
</head>
<body style="margin: 0;">
<div style="background-color: black; position: fixed; bottom: 0; width: 100%; height: 20px; padding: 20px; opacity: .85; z-index: 1000;">
<svg id="Layer_1" data-name="Layer 1" height="40px" width="40px" style="top: -8px;
position: relative;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800"><defs><style>.cls-1{fill:#fff;}</style></defs><title>openai-symbol-flat-white</title><path class="cls-1" d="M617.24,354a126.36,126.36,0,0,0-10.86-103.79,127.8,127.8,0,0,0-137.65-61.32,126.36,126.36,0,0,0-95.31-42.49A127.81,127.81,0,0,0,251.5,234.89,126.4,126.4,0,0,0,167,296.19a127.82,127.82,0,0,0,15.72,149.86,126.36,126.36,0,0,0,10.86,103.79,127.81,127.81,0,0,0,137.65,61.32,126.36,126.36,0,0,0,95.31,42.49A127.81,127.81,0,0,0,548.5,565.11,126.4,126.4,0,0,0,633,503.81,127.82,127.82,0,0,0,617.24,354ZM426.58,620.49a94.79,94.79,0,0,1-60.85-22c.77-.42,2.12-1.16,3-1.7l101-58.34a16.42,16.42,0,0,0,8.3-14.37V381.69l42.69,24.65a1.52,1.52,0,0,1,.83,1.17V525.43A95.18,95.18,0,0,1,426.58,620.49ZM222.34,533.26A94.74,94.74,0,0,1,211,469.56c.75.45,2.06,1.25,3,1.79l101,58.34a16.44,16.44,0,0,0,16.59,0l123.31-71.2v49.3a1.53,1.53,0,0,1-.61,1.31L352.19,568.05A95.16,95.16,0,0,1,222.34,533.26ZM195.77,312.77a94.71,94.71,0,0,1,49.48-41.68c0,.87-.05,2.41-.05,3.48V391.25a16.41,16.41,0,0,0,8.29,14.36L376.8,476.8l-42.69,24.65a1.53,1.53,0,0,1-1.44.13l-102.11-59A95.16,95.16,0,0,1,195.77,312.77Zm350.74,81.62L423.2,323.19l42.69-24.64a1.53,1.53,0,0,1,1.44-.13l102.11,58.95a95.08,95.08,0,0,1-14.69,171.55c0-.88,0-2.42,0-3.49V408.75A16.4,16.4,0,0,0,546.51,394.39ZM589,330.44c-.75-.46-2.06-1.25-3-1.79L485,270.31a16.46,16.46,0,0,0-16.59,0l-123.31,71.2v-49.3a1.53,1.53,0,0,1,.61-1.31L447.81,232A95.07,95.07,0,0,1,589,330.44ZM321.89,418.31l-42.7-24.65a1.52,1.52,0,0,1-.83-1.17V274.57a95.07,95.07,0,0,1,155.9-73c-.77.42-2.11,1.16-3,1.7l-101,58.34a16.41,16.41,0,0,0-8.3,14.36Zm23.19-50L400,336.59l54.92,31.7v63.42L400,463.41l-54.92-31.7Z"/></svg>
<div style="display: inline-block; color: white; vertical-align: top; margin-top: 4px; font-family: Helvetica, sans-serif;">
Code generated by <a style="color: white; text-decoration: none; font-weight: bold;" href="https://openai.com/blog/openai-codex/">OpenAI Codex</a>
</div>
</div>
</body>
</html>