⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rhythm.c

📁 号作品是一个简单的全屏小游戏
💻 C
字号:
#include <string.h>
#include <allegro.h>
#include "rhythm.h"
#include "timer.h"
#include "sound.h"
#include "edit.h"

#define NUM_ENEMY 4
#define MAN_X 80
#define MAN_Y 80
#define POS_X 100
#define POS_Y 300
#define ENM_X 800
#define ENM_Y 300
#define DELAY 100

int timer_t;
FILE * fp;
int rhy_len;
int rhy_notes[1000];
int rhy_b[1000];
int tot_time;
int exit_flag;

void draw_back(){
    BITMAP *background;
    
    background = load_bmp("pic/background.bmp", NULL);
    blit(background, screen, 0, 0, 0, 0, background->w, background->h);
    destroy_bitmap(background);
}

void init(){
    allegro_init();
    install_keyboard();
    install_mouse();
    install_timer();
    set_color_depth(32);
    set_gfx_mode(GFX_AUTODETECT, 1024, 768, 0, 0);
    
    set_color_conversion(COLORCONV_TOTAL);
    
    install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL);
    load_midi_patches();
    
    LOCK_VARIABLE(timer_t);
    LOCK_FUNCTION(timer);
    install_int_ex(timer, BPS_TO_TIMER(10));   
}

void draw_heart(BITMAP *buff, int hp){
    int i;
    BITMAP *heart;
    
    heart = load_bitmap("pic/hp.bmp", NULL);
    for (i = 0; i < hp; ++i){
        draw_sprite(buff, heart, i*heart->w, 0);
    }
    destroy_bitmap(heart);
}     
    

void process(){
    int hp = 5;
    int i, j, k, res,rhy_len_che;
    char str[100];
    BITMAP *fb;
    BITMAP *buff;
    BITMAP *tot_fight;
    BITMAP *man_fight[4];
    BITMAP *man_stand;
    BITMAP *enemy;
    BITMAP *your_turn;
    
    exit_flag = 0;
    fp = fopen("data/rhy.txt", "r");
    
    
    tot_fight = load_bitmap("pic/man_shoot.bmp", NULL);
    for (i = 0; i < 4; ++i){
        man_fight[i] = create_sub_bitmap(tot_fight, i*MAN_X, 0, MAN_X, MAN_Y);
    }
    
    
    your_turn = load_bitmap("pic/your_turn.bmp", NULL);
    strcpy(str, "pic/enemy00.bmp");
        
    man_stand = load_bitmap("pic/man_stand.bmp", NULL);   
    for (i = 0; i < NUM_ENEMY && hp > 0;)
    {
        buff=load_bitmap("pic/fight_back.bmp", NULL);
        draw_sprite(buff, man_stand, POS_X, POS_Y);
        
        str[10] = i+'0';
        enemy = load_bitmap(str, NULL);
        draw_sprite(buff, enemy, ENM_X, ENM_Y);
        draw_heart(buff, hp);
        vsync();
        blit(buff, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
        
        rhy_len_che=play_rhythm();
        
        draw_sprite(buff, your_turn, (SCREEN_W-your_turn->w)/2, (SCREEN_H-your_turn->h)/2);
        blit(buff, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
        
        
        res = check(rhy_len_che);
        if (exit_flag)
        {
            return;
        }
        for (j = 0; j < 4; ++j){
            buff=load_bitmap("pic/fight_back.bmp", NULL);
            draw_sprite(buff, man_fight[j], POS_X, POS_Y);
            draw_sprite(buff, enemy, ENM_X, ENM_Y);
            draw_heart(buff, hp);
            vsync();
            blit(buff,screen,0,0,0,0,SCREEN_W,SCREEN_H);
            rest(DELAY);
        }
            
            
        buff=load_bitmap("pic/fight_back.bmp", NULL);
        draw_sprite(buff, man_stand, POS_X, POS_Y); 
        if (res){
            ++i;
            
        }
        else{
            --hp;
            draw_sprite(buff, enemy, ENM_X, ENM_Y);
        }
        draw_heart(buff, hp);
        vsync();
        blit(buff,screen,0,0,0,0,SCREEN_W,SCREEN_H);
    }
    if (hp){
        buff=load_bitmap("pic/win.bmp", NULL);
    }
    else{
        buff=load_bitmap("pic/lose.bmp", NULL);
    }
    blit(buff,screen,0,0,0,0,SCREEN_W,SCREEN_H);
    rest(1000);
    destroy_bitmap(buff);  
    fclose(fp);      
}


    
    
int main(void){
    int mykey, end_game = 0;
    
    init();
    draw_back();
    while(!end_game){
        
        mykey = readkey();
        mykey >>= 8;
        switch(mykey){
            case KEY_1:
                process();
                draw_back();
                break;
            case KEY_2:
                edit_rhythm();
                draw_back();
                break;
            case KEY_3:
                end_game = 1;
                break;
            default:;
        }
    }

    return 0;
}

END_OF_MAIN()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -