Mercurial > hg > Members > kono > tree_dandy2
diff main.c @ 0:01387a2e419e
initial version
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 07 Dec 2010 15:39:45 +0900 |
parents | |
children | 972a7f233b23 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.c Tue Dec 07 15:39:45 2010 +0900 @@ -0,0 +1,470 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <math.h> +#include <time.h> +#include <SDL.h> +#include "SDL_opengl.h" +#include "object.h" +#include "tree_controll.h" +#include "xml.h" +#include "profile.h" +#include "syokika.h" +//#include "libps.h" +#include "sankaku.h" +#include "sgoex.h" +#include "sound.h" +#include "bool.h" +//#include "move.h" +#include "Character.h" +#include "Character_state.h" +#include "bom.h" +#include "count2.h" +//#include "Enemy.h" +#include "tokuten.h" +#include "schedule.h" +#include "tama.h" +//#include"profile.h" +#include "debug.h" +#include "trace.h" +#include "LoadSprite.h" +#include <SDL_mixer.h> + +#include "error.h" + +int gamef = 0; +int use_keybord = 0; +int cdp[20] = { 16, 16, 16, 17, 18, 0 }; +int d, i; + +int rswait = 0; +int cf = 0; +int cc = 0; + +//static SDL_Surface *screen; +static Uint32 background; +// static char *pad_trace_file; + +extern void schedule(); +extern void tokuten(); +extern void Pad(); +extern void keybord(); +//extern void PutSpriteEx(int number, int x, int y, GLfloat scalex, GLfloat scaley, GLfloat angle); +//GLuint texture[250] = {0}; +static void gamesyokika(); +static void opening(); +static void pause(); +//static char *pad_trace_file; +extern void SDL_GL_Enter2DMode(); +extern void SDL_GL_Leave2DMode(); + +/** + * runmode: + * 0 - normal game + * 1 - capture mode + * program will capture all pad traces on a play and + * dump it into a file + * 2 - trace mode + * program will run with a trace file which is generated + * by capture-mode + */ +int runmode; + +#ifdef ENABLE_TRACEMODE +#define SCMP_SIZ 8 + + +void print_usage() +{ + dbg_printf("usage: %s [-h|-help|--help][--capture filename][--trace filename]\n",PROGRAM_NAME); +} + + + +int get_option(int argc, char *argv[]) +{ + int i; + if (argc < 2) { + return 0; + } + for (i = 0; i < argc; i++) { + if (!strncmp(argv[i], "--capture", SCMP_SIZ)) { + if (++i >= argc) { + return 1; + } + pad_trace_file = argv[i]; + runmode = 1; + return 0; + } else if (!strncmp(argv[i], "--trace", SCMP_SIZ)) { + if (++i >= argc) { + return 1; + } + pad_trace_file = argv[i]; + runmode = 2; + return 0; + } else if (!strncmp(argv[i], "--help", SCMP_SIZ) || + !strncmp(argv[i], "-help", SCMP_SIZ) || + !strncmp(argv[i], "-h", SCMP_SIZ)) { + return 1; + } + } + return 1; +} +#endif //ENABLE_TRACEMODE + + +int main(int argc, char *argv[]) +{ + Timeprof timeprof_move; + timeprof_move = timeprof_new(); + dbg_init("/dev/stdout"); + + /** + * timeprof があるんだけどね + */ + int frames = 0; + int start_time = 0, stop_time = 0; + +#ifdef ENABLE_TRACEMODE + if (get_option(argc, argv)) { + print_usage(); + return (1); + } + if (pad_trace_file) { + pad_file_open(pad_trace_file); + } + if(myrand_open_file("rand_trace")) { + perror("main"); + retun 1; + } +#endif //ENABLE_TRACEMODE + + //SDL_Joystick *joy=SDL_JoystickOpen(0); + + syokika(argc, argv); + __debug("syokikaが呼びだされました\n"); + SDL_Joystick *joy=SDL_JoystickOpen(0); + if(!joy) { + fprintf(stderr,"failed to open joystick 0\n"); + use_keybord = 1; + } + background = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00); + SDL_FillRect(screen, NULL, background); + SDL_GL_Enter2DMode(); + + opening(joy); + + __debug("openingがよびだされました\n"); + + /** + * sound.c に移しました + * 代わりに InitSdlMixer(void); を使います。 + * まあ中身一緒なんだけどね + */ + /** + if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,MIX_DEFAULT_FORMAT,2,1024) < 0) { + fprintf(stderr,"failed to initialize SDL_mixer.\n"); + SDL_Quit(); + exit(-1); + } + */ + + // SDL_mixer とかいろいろ初期化 + // もし Init に失敗したら + // 以後の Mixer 関連の関数を呼び出しても + // 中では何も行われないとかいう小細工を入れました。 + InitSdlMixer(); + + // 音楽ファイルの読み込み + LoadSdlMixer(); + + // ボリューム調整 + InitVolume(); + + // 音出しテスト + PlaySdlMixer(-1, BGM); + + if(!(init_chara_list(1024))){ + __debug("failed to init_chara_list\n"); + } + + __debug("finished init_chara_list\n"); + + start_time = SDL_GetTicks(); + + while (gamef) { + if ((pad[0].l1 != 0) && (pad[0].r1 != 0) && + (pad[0].l2 != 0) && (pad[0].r2 != 0)) { + glFlush(); + SDL_GL_SwapBuffers( ); + gamesyokika(joy); + } + + if (pad[0].quit != 0) { + gamef = 0; + } + + //SDL_FillRect(screen, NULL, background); + glClear( GL_COLOR_BUFFER_BIT); + + schedule(); + enemyfaste = count; + + timeprof_begin(timeprof_move); + //Move(); //enemy move + collision_detect(); + outofwindow(); + timeprof_end(timeprof_move); + state_update(); + asteroidi = 0; + //charpatern(); + //bosguage(); + + if (jiki.bf == TRUE) { + Player(0); + count++; + PutSprite(count, jiki.x, jiki.y, jiki.ch); + } + + Putbom(); + tokuten(); + + count++; + //PutSprite(count, 0, 960 - 96, 10); + /*インフレゲージ */ + count++; + //PutSprite(count, 0, 0, 48); + obj_draw(); + pause(joy); + + if (use_keybord) { + keybord(); + } else { + Pad(joy); + } + + glFlush(); + SDL_GL_SwapBuffers( ); + filpcount++; + SDL_Delay(10); + count = 0; + + + frames++; + } + + stop_time = SDL_GetTicks(); + + { + char buf[128]; + timeprof_sprint(buf, "move", timeprof_move); + dbg_printf("%s\n", buf); + } + + printf("%f FPS\n", ((float)frames)/(stop_time-start_time)*1000.0); + + SDL_GL_Leave2DMode(); + SDL_FreeSurface(sprite); + + SDL_JoystickClose(joy); + + //_______________________________________________ + // SDL_mixerの後始末 + Mix_CloseAudio(); + Mix_HaltMusic(); + FreeSdlMixer() ; + //_______________________________________________ + + + SDL_Quit(); + return(0); +} + + +void gamesyokika(SDL_Joystick *joy) +{ + laser_lv3[0].r = 62; + laser_lv3[0].r = 62; + for (i = 0; i < 3; i++) { + tlv3[i].y = -1; + } + filpcount = 0; + stage = 0; + //for (i = 0; i < 300; i++) + //enemy[i].f = FALSE; + jiki.zanki = 3; + jiki.x = 60; + jiki.y = 200; + jiki.ch = 3; + jiki.point = 0; + jiki.bf = FALSE; + jiki.muteki = 120; + enemycount = 0; + lg.stg = 4096; + pg.stg = 4096; + infg.stg = 0; + infg_level = 0; + //kyeenemyno = -1; + fastebos = 0; + jiki.ccount = 99; + p_extend = 200000; + pad[0].up=0; + pad[0].down=0; + pad[0].right=0; + pad[0].left=0; + pad[0].st=0; + pad[0].se=0; + opening(joy); +} + + +void opening(SDL_Joystick *joy) +{ + //for (i = 0; i < 300; i++) { + //}; + + SoundStop(); + SoundPlay(7); + + while (1) { + if(use_keybord == 1) { + keybord(); + } else { + Pad(joy); + } + + count = 1; + + PutSprite(count, 700, 480, 53); // put `push start' string on screen. + count++; + PutSprite(count, 224, 776, 119); // put `super dandy' + count++; + // PutSprite(count, 200, 64, 190); + // PutSpriteEx(count, 8192, 8192, 0); + PutSpriteEx(190, 800, 264, 2, 2, 5); + count++; + PutSprite(count, 396, 432, 191); + //PutSpriteEx(count, 8192, 8192, 0); + count++; + PutSprite(count, 640, 640, 192); + //PutSpriteEx(count, 8192, 8192, 0); + + if (pad[0].st > 1) { + jiki.bf = TRUE; + + //CdPlay(1,&cdp[0],0); + SoundStop(); + SoundPlay(0); + + gamef = 1; + pad[0].st = 1; + return; + } + if ((pad[0].se > 0) && (pad[0].st > 0)) { + gamef = 0; + break; + } + + + SDL_GL_SwapBuffers( ); + } +} + +void +pause(SDL_Joystick *joy) +{ + if (jiki.zanki != 0 && jiki.bf != FALSE) { + if (pad[0].se == 1) { + //Mix_Pause(BGM); + PauseSdlMixer(BGM); + while(1){ + if(use_keybord == 1) { + keybord(); + } else { + Pad(joy); + } + if(pad[0].st == 0) + continue; + pad[0].up=0; + pad[0].down=0; + pad[0].right=0; + pad[0].left=0; + pad[0].se=0; + pad[0].st=0; + //Mix_Resume(BGM); + ResumeSdlMixer(BGM); + break; + } + } + } + if (jiki.zanki == 0) { + // RECT *recp; + if ((jiki.ccount > 0) && (cf == 0)) { + cf = 1; + count++; + //cgcg(2); + PutSprite(2, 480, 480, 110); + count++; + //cgcg(1); + } + if ((jiki.ccount > 0) && (cf == 1)) { + while (1) { + if (pad[0].st > 0) { + cf = 0; + jiki.ccount--; + jiki.zanki = 3; + enemycount++; + cc = 0; + for (i = 0; i < 4; i++) { + clear_result[i] = 0; + } + goto f; + } + cc++; + if (29 - cc / 60 < 20) { + cc = 0; + cf = 3; + break; + } + SDL_Delay(100); + PutSprite(1, 640, 640, 29 - cc / 60); + // PutSpriteEx(1, 409 * ((cc % 60) + 1), 409 * ((cc % 60) + 1), 0); + + Pad(joy); + SDL_GL_SwapBuffers( ); + } + } + if (rswait > 60 * 6) { + cf = 0; + rswait = 0; + gamesyokika(joy); + } + rswait++; + count++; + //cgcg(1); + PutSprite(1, 480, 480, 19); + return; + } + if (jiki.bf == FALSE) { + f: + if (rswait < 80) { + rswait++; + return; + } else { + rswait = 0; + jiki.x = 60; + jiki.y = 200; + jiki.bf = TRUE; + + pad[0].st = 0; + lg.stg = 4096; + pg.stg = 4096; + laser_lv3[0].r = 62; + tlv3[0].r = 0; + tlv3[0].y = -1; + return; + // sb_size = -1; + } + } +}