Skip to content

Commit b6c3cca

Browse files
committed
added two games
1 parent f3d6cce commit b6c3cca

File tree

5 files changed

+151
-3
lines changed

5 files changed

+151
-3
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CC = gcc
1+
CC = gcc -std=c99
22

33
CFLAGS = -Wshadow -Wall -Wpedantic -Wextra
44
CFLAGS+= -Ofast -march=native

emu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ static void discharge()
212212
for(int j = 0; j < VROWS; j++)
213213
for(int i = 0; i < VCOLS; i++)
214214
if(!charging(j, i))
215-
charges[j][i] *= 0.97;
215+
charges[j][i] *= 0.997;
216216
}
217217

218218
void dump()
@@ -241,7 +241,7 @@ int main(int argc, char* argv[])
241241
SDL_PumpEvents();
242242
charge();
243243
cycle();
244-
if(cycles % 10 == 0)
244+
if(cycles % 15 == 0)
245245
output();
246246
discharge();
247247
}

examples/Makefile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,26 @@ BIN = ../bin
33
CMP = ../c8c
44

55
BINS = mul.bin maze.bin tty.bin
6+
BINS+= collision.bin invaders.bin
67
HEXS = $(BINS:.bin=.hex)
78
ASMS = $(BINS:.bin=.asm)
89

910
all: $(BINS)
1011

12+
collision.bin: collision.hex
13+
$(BIN) $^ $@
14+
collision.hex: collision.asm
15+
$(ASM) $^ $@
16+
collision.asm: collision.c8
17+
$(CMP) $^ $@
18+
19+
invaders.bin: invaders.hex
20+
$(BIN) $^ $@
21+
invaders.hex: invaders.asm
22+
$(ASM) $^ $@
23+
invaders.asm: invaders.c8
24+
$(CMP) $^ $@
25+
1126
tty.bin: tty.hex
1227
$(BIN) $^ $@
1328
tty.hex: tty.asm

examples/collision.c8

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
dot = { 0x80 };
2+
3+
main()
4+
{
5+
auto x = 3, xm = 64;
6+
auto y = 3, ym = 32;
7+
auto dir = 1;
8+
// Directional keyboard keys.
9+
auto A = 7, D = 9, W = 5, S = 8;
10+
while(1)
11+
{
12+
// Get move direction.
13+
auto a = getchar();
14+
if(a == A) { dir = 0; } else
15+
if(a == D) { dir = 1; } else
16+
if(a == W) { dir = 2; } else
17+
if(a == S) { dir = 3; }
18+
// Apply move direction.
19+
if(dir == 0) { x -= 1;} else
20+
if(dir == 1) { x += 1;} else
21+
if(dir == 2) { y -= 1;} else
22+
if(dir == 3) { y += 1;}
23+
// Out of bounds fix.
24+
if(x == xm) { x = 0 ; } else
25+
if(x == -1) { x = xm - 1; } else
26+
if(y == -1) { y = ym - 1; } else
27+
if(y == ym) { y = 0 ; };
28+
// Draw. If collision, clear the screen.
29+
if(draw(x, y, dot)) { clear(); }
30+
}
31+
}

examples/invaders.c8

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
alien = { 0x18, 0x3C, 0x7E, 0xDB, 0xFF, 0x24, 0x5A, 0xA5, };
2+
3+
gun = { 0x10, 0x38, };
4+
5+
bullet = { 0x10 };
6+
7+
move_gun(x)
8+
{
9+
auto dir = getchar();
10+
auto left = 7;
11+
auto right = 9;
12+
if(dir == left)
13+
{
14+
return x -= 1;
15+
}
16+
else if(dir == right)
17+
{
18+
return x += 1;
19+
}
20+
else
21+
{
22+
return x += 0;
23+
}
24+
}
25+
26+
shoot_gun()
27+
{
28+
return getchar() == 5;
29+
}
30+
31+
draw_aliens()
32+
{
33+
auto start = 3;
34+
auto x = 50;
35+
while(x)
36+
{
37+
draw(start + x, 0, alien);
38+
x -= 10;
39+
}
40+
draw(start, 0, alien);
41+
}
42+
43+
draw_gun(x, ymax, init)
44+
{
45+
auto y = ymax - sizeof(gun);
46+
if(init)
47+
{
48+
draw(x, y, gun);
49+
}
50+
draw(x, y, gun);
51+
x = move_gun(x);
52+
draw(x, y, gun);
53+
return x;
54+
}
55+
56+
draw_bullet(x, y, tip)
57+
{
58+
if(y == tip)
59+
{
60+
draw(x, y, bullet);
61+
}
62+
draw(x, y, bullet);
63+
if(draw(x, y - 1, bullet))
64+
{
65+
return 0;
66+
}
67+
else
68+
{
69+
return y -= 1;
70+
}
71+
}
72+
73+
main()
74+
{
75+
auto x = 0;
76+
auto ymax = 32;
77+
auto tip = ymax - sizeof(gun);
78+
auto bx = 0;
79+
auto by = 0;
80+
auto shooting = 0;
81+
auto init = 1;
82+
draw_aliens();
83+
while(1)
84+
{
85+
x = draw_gun(x, ymax, init);
86+
if(shoot_gun())
87+
{
88+
bx = x;
89+
by = tip;
90+
shooting = 1;
91+
}
92+
if(by == 0)
93+
{
94+
shooting = 0;
95+
}
96+
if(shooting)
97+
{
98+
by = draw_bullet(bx, by, tip);
99+
}
100+
init = 0;
101+
}
102+
}

0 commit comments

Comments
 (0)