- Codice: Seleziona tutto
//librerie
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "allegro.h"
// immagini che formano le sprite
BITMAP *buf,*sprite,*sfondo,*scrolling,*cattivo,*playeresplode,*miss,*miss1,
*playeresplode1,*playeresplode2,*gv,*iniz;
// paletta dei colori
PALETTE colori;
// variaibli per lo scroll dello sfondo,direzione lancio missile,suoni vari ed altro
int x,y,moltiplica,xscroll,xconto,yconto,morto,tempesplgioc,
fuoco,xmiss,ymiss,mortocattivo,tempesplcattivo,contapunti,vite,fine,suono1,
suono2,suono3,suono4,go,lancio=0,xpropal,ypropal,direzionex,direzioney,
proicont=0,lancio1=0,ini,meno;
// punteggio
char score[80];
//array del nemico,col numero di nemici e dv partono sullo schermo
int xa[100],ya[100],valorexa[100],valoreya[100],array, numeroa=10, start=100;
//suoni
SAMPLE *suono,*gameov;
MIDI *music;
void doppiobuffering()
// chiama il buff per non far saltare l'imm del gioco
{
vsync();
blit(buf, screen, 0, 0, 0, 0, 1024, 768);
clear(buf);
}
void inizio(){
//disegna im pre-gioco
if (ini==0) { // variabile di inizio o di gioco: 0=inizio - 1=inizio //
draw_sprite(buf, iniz, 175, 175);
if (key[KEY_ENTER]) {
ini=1;
meno=0;
}
}
}
void nemico() {
//disegna nemico
if (ini==1) {
for (array=0; array<=numeroa; array++)
{
draw_sprite(buf, cattivo, xa[array], ya[array]);
}
}
}
void movimento() {
//nemico si muove
if (ini==1) {
for (array=0; array<=numeroa; array++) {
xa[array]=xa[array]+1*valorexa[array];
ya[array]=ya[array]+1*valoreya[array];
if (xa[array]==576) valorexa[array]=-1;
if (xa[array]==0) valorexa[array]=+1;
if (ya[array]==438) valoreya[array]=-1;
if (ya[array]==0) valoreya[array]=+1;
}
}
}
void player() {
//giocatore sullo schermo
if (ini==1) {
if (morto==1) {
draw_sprite(buf, sprite, x, y);
}
}
}
void movimentotasti() {
if (ini==1) {
if (morto==1) {
if (key[KEY_LEFT]) x=x-2; if (x<=0) x=0;
if (key[KEY_RIGHT]) x=x+2; if (x>=883) x=883;
if (key[KEY_UP]) y=y-2; if (y<=0) y=0;
if (key[KEY_DOWN]) y=y+2; if (y>=690) y=690;
if (key[KEY_SPACE])
//variabile di missile giocatore
fuoco=1;
}
}
}
void fondale() {
if (ini==1) {
xscroll=xscroll+3;;
blit(scrolling, buf, xscroll, 0, 0, 0, 1024, 768);
if (xscroll>1023) {
xscroll = 0;
}
}
}
void collisione() {
// collisione giocatore nemico
if (ini==1) {
if (((x+30)>=xa[array]) && (x<=(xa[array]+40))) {
if (((y+20)>=ya[array]) && (y<=(ya[array]+31))) {
morto=0;
}
}
}
}
void esplgioc() {
// il giocatore
if (ini==1) {
if (morto==0) {
if (tempesplgioc<=150) {
tempesplgioc++;
draw_sprite(buf, playeresplode2, x, y);
}
// se giocatore colpito riportalo alle variabili d'inizio e vite -1
else {
x=-10; y=280;
morto=1;
tempesplgioc=0;
vite--;
}
}
}
}
void missile() {
if (ini==1) {
if (fuoco==0) {
xmiss=x+75; ymiss=y-2;
}
if (fuoco==1) {
draw_sprite(buf, miss, xmiss, ymiss);
//xmiss++; //rimettere per un missile alla volta e togliere l'istruzione dopo
xmiss=xmiss+14; //+ missili se resta premuta la barra spaziatrice
if (suono2==0) {
play_sample(suono, 255,128,1000, FALSE);
suono2=1;
}
if (xmiss>=1024) {
fuoco=0;
suono2=0;
}
}
}
}
void cattivocolpito() {
if (ini==1) {
if (((xmiss+10)>=xa[array]) && (xmiss<=(xa[array]+40))) {
if (((ymiss+5)>=ya[array]) && (ymiss<=(ya[array]+31))) {
mortocattivo=0;
fuoco=0;
}
}
}
}
void esplcattivo() {
if (ini==1) {
if (mortocattivo==0) {
if (tempesplcattivo<=150) {
tempesplcattivo++;
draw_sprite(buf, playeresplode, xa[array], ya[array]);
}
else {
tempesplcattivo=0;
mortocattivo=1;
contapunti++;
}
}
}
}
void puntivite() {
if (ini==1) {
sprintf(score, "PUNTI: %ld VITE: %ld ", (long)contapunti, (long)vite);
textout(buf, font, score, 1, 1, 215);
}
}
void gameover() {
if (ini==1) {
if (vite==0) {
if (fine<=147) {
//textout(buf, font, "GAME OVER", 500,350, 215);
draw_sprite(buf, gv, 330, 350);
fine++;
if (suono3==0) {
play_sample(gameov, 255,128,1000, FALSE);
suono3=1;
}
}
else {
// riporto le variabili da zero se vite finite
tempesplgioc=0;
tempesplcattivo=0;
morto=1;
x=10; y=280;
yconto=3; xconto=0;
fuoco=0;
xmiss=0; ymiss=0;
mortocattivo=1;
contapunti=0;
vite=3;
fine=0;
go=1;
// variabili di suono attivate //
suono1=0; suono2=0; suono3=0, suono4=0;
xpropal = xa[array];
ypropal = ya[array];
}
}
}
}
void fuoconemico() {
if (ini==1) {
if (lancio==0){
proicont++;
if (proicont==76){
proicont=0;
lancio=1;
if (xa[array]>=x) direzionex=1;
if (xa[array]<=x) direzionex=2;
if (ya[array]>=y) direzioney=1;
if (ya[array]<=y) direzioney=2;
}
xpropal = xa[array]+1;
ypropal = ya[array]-1;
}
if (lancio==1) {
if (direzionex==1) xpropal=xpropal-3;
if (direzionex==2) xpropal=xpropal+3;
if (direzioney==1) ypropal=ypropal-3;
if (direzioney==2) ypropal=ypropal+3;
draw_sprite(buf,miss1, xpropal,ypropal);
if (xpropal<=0) lancio=0;
if (xpropal>=1024) lancio=0;
if (ypropal<=0) lancio=0;
if (ypropal>=768) lancio=0;
}
if (((xpropal+10)>=x) && (xpropal<=(x+80))) {
if (((ypropal+5)>=y) && (ypropal<=(y+51))) {
if (suono4==0) {
play_sample(gameov, 255,128,1000, FALSE);
suono4=1;
}
morto=0;
lancio=0;
suono4=0;
}
}
}
}
int main()
{
allegro_init();
install_keyboard();
set_color_depth(32);
set_palette(colori);
install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, 0);
suono = load_sample("fuoco.wav");
gameov = load_sample("gameover.wav");
set_volume(255,255);
set_gfx_mode(GFX_AUTODETECT, 1024, 768, 0, 0);
buf = create_bitmap(1024, 768);
clear(buf);
sprite = load_bmp("player.bmp",colori);
sfondo = load_bmp("fondone.bmp",colori);
cattivo = load_bmp("nemico.bmp",colori);
playeresplode = load_bmp("esplosione.bmp",colori);
playeresplode1 = load_bmp("esplosione.bmp",colori);
playeresplode2 = load_bmp("esplo.bmp",colori);
miss = load_bmp("missile.bmp",colori);
miss1 = load_bmp("missile1.bmp",colori);
gv = load_bmp("gv.bmp",colori);
iniz= load_bmp("iniz.bmp",colori);
scrolling = create_bitmap(2048, 768);
clear(scrolling);
for (moltiplica=0;moltiplica<=2048;moltiplica=moltiplica+1024) {
blit(sfondo, scrolling, 0, 0, moltiplica, 0, 1024, 768);
}
tempesplgioc=0;
tempesplcattivo=0;
morto=1;
x=10; y=280;
yconto=3; xconto=0;
fuoco=0;
xmiss=0; ymiss=0;
mortocattivo=1;
contapunti=0;
vite=3;
fine=0;
suono1=0; suono2=0; suono3=0, suono4=0;
play_midi(music, TRUE);
for (array=0; array<=numeroa; array++) {
start=start+60;
xa[array]=start; ya[array]=start;
valorexa[array]=1; valoreya[array]=1;
}
while (!key[KEY_ESC]) {
doppiobuffering();
fondale();
player();
player();
movimentotasti();
movimentotasti();
movimentotasti();
nemico();
movimento();
//fuoconemico();
collisione();
esplgioc();
missile();
missile();
cattivocolpito();
esplcattivo();
puntivite();
gameover();
inizio();
}
destroy_bitmap(buf);
destroy_bitmap(sprite);
destroy_bitmap(sfondo);
destroy_bitmap(cattivo);
destroy_bitmap(scrolling);
destroy_bitmap(playeresplode);
destroy_bitmap(playeresplode1);
destroy_bitmap(gv);
destroy_bitmap(iniz);
destroy_midi(music);
}
END_OF_MAIN ();