2014 ソフトウェア設計及び演習用の班Wiki

gr03:表示・出力モジュール

表示すべきもの

  • ゲーム画面
  • 自機キャラクター
  • 敵キャラクター
  • 回復アイテム
  • 武器アイテム
  • スコア
  • タイム

11月24日までの進行状況

  • 背景画像の表示及びその上にgif画像(1枚)の表示が可能。 まだ試してはいないが自機モジュールから座標を取得しキャラの表示もできる?

main関数に呼び出してもらう関数

今のところdisply()を予定 12/24現在 引数はなし

main_disp.h

// $Id$
// -*-: coding:utf-8; -*-
#pragma once

#include <stdio.h>
# include <stdlib.h>
# include <gtk/gtk.h>
# include <glib/gprintf.h>

# include "gtk_lib.h"
# include "anime.h"

# include "char_pics.h"

void disply(GtkWidget *window);	// 画面への表示出力

char_pics.h

// $Id$
// -*-: coding:utf-8; -*-
#pragma once

# include <stdlib.h>
# include <gtk/gtk.h>
# include <glib/gprintf.h>

# include "gtk_lib.h"
# include "anime.h"

# include "progress.h"

extern mySprite *m_char;
extern mySprite *enemy_char;
extern int Pix_rm_flag;


mySprite *main_char_new(myAnimeArea *area); // 自機キャラ生成
gint main_char_move(mySprite *sprite); // 自機キャラ座標

gint enemys_init(myAnimeArea *area);
void enemy_char_new(myAnimeArea *area, gint len_ene); // 敵キャラ生成
gint enemy_char_move(mySprite *sprite); // 敵キャラ座標

gint bulls_init(myAnimeArea *area);
void bull_new(myAnimeArea *area, gint len); // 弾生成
void bull_move(mySprite *sprite); // 弾座標

void pics_remove(mySprite *self); // 画像表示消去

mySprite *timer_new(myAnimeArea *area); //タイマー画像生成
void time_gazou_disp(mySprite *sprite); //タイマー画像更新

void life_new(myAnimeArea *area); // HP画像生成
void life_posi(mySprite *sprite); // HP画像更新

void warning_new(myAnimeArea *area);  //WARNING画像生成
int warning_disp(mySprite *sprite);   //WARNING画像更新

void talk_init(myAnimeArea *area);
void talk_new(myAnimeArea *area);
void talk_posi(mySprite *sprite);

void item_new(myAnimeArea *area);  //item生成
int item_disp(mySprite *sprite);   //item画像更新
int weapon_disp(mySprite *sprite); //weapon画像更新

void hira_new(myAnimeArea *area); // 平山先生画像生成
int hira_posi(mySprite *sprite); // 平山先生画像更新

mySprite *score_new(myAnimeArea *area); //スコア画像生成
void score_gazou_disp(mySprite *sprite); //スコア画像更新

anime.h

// キャラや弾のアニメーション領域作成ヘッダ

# ifndef _ANIME_H
# define _ANIME_H

# include <stdlib.h>
# include <glib.h>
# include <glib/gprintf.h>
# include <gtk/gtk.h>
# include <gdk-pixbuf/gdk-pixbuf.h>
# include "gtk_lib.h"


//スプライトが動く領域
typedef struct {
  GtkWidget *drawing_area; //描画領域
  GdkPixmap *bg_pixmap;    //背景
  gint width;              
  gint height;
  gint timeout;
  GList *sprites;          //スプライトのリスト
  GSourceFunc move;
} myAnimeArea;

typedef struct { 
  myAnimeArea *anime_area; // のっかっているアニメーション領域
  gint timeout;            // スプライトのタイムアウト */
  GdkPixbuf *pixbuf;       // スプライト用画像(ピクスバッファ)
  gint width;              // 幅
  gint height;             // 高さ
  gint x, y;               // 座標
  gint vec;                // キャラの向き
  gint length;             // 敵や弾の配列数
  gint ball_del;           // 弾の消失
  GSourceFunc move;        // 動きを決める関数
} mySprite;

//アニメーション領域 API
myAnimeArea *
my_anime_area_new(gint width, gint height, GdkPixmap *bg_pixmap, gint timeout);
 // 幅,高さ,背景画像,時間間隔 (ms) を指定して,
 // アニメーション領域を作る

void
my_anime_area_remove(myAnimeArea *area);
 //アニメーション領域 area を消す

// スプライトAPI
mySprite *
my_sprite_new(myAnimeArea *area, gchar *path, gint timeout, GSourceFunc, gint length);
 //スプライトを作成する
 // area: 作成されるスプライトがのる,アニメーション領域
 // path: 画像ファイルへのパス
 // timeout: スプライトを動かす時間間隔,
 //       描画はアニメーション領域の再描画時に行う

void my_sprite_draw(mySprite *sprite);  

void my_sprite_init(mySprite *sprite);
   // スプライトの位置とベクトルの初期値を決める関数
   // 利用者が用意する

void my_sprite_move(mySprite *sprite);
 // スプライトを移動する関数
 // 利用者が用意する

void my_sprite_remove(mySprite *);
 // スプライトの消去

#endif

gtk_lib.h

# ifndef _MY_GTK_LIB_H_
# define _MY_GTK_LIB_H_
# include <gtk/gtk.h>

# define WIDTH 1280
# define HEIGHT 720

//gtkの機能をまとめて使うためのインターフェイス

typedef PangoFontDescription My_Font_Desc;

// 初期化
//   とにかく実行直後に呼んでおくこと
void my_init(int argc, char *argv[]);

// ウィンドウの作成
//   1280x720, 枠の幅が0pixel
GtkWidget * my_window_new(gint width, gint height);

// ラベルの作成
GtkWidget * my_label_new(char *label, My_Font_Desc *fontdescription); 
// ラベル付きボタンの作成
GtkWidget * my_button_new(char *label, My_Font_Desc *fontdescription); 
// イメージの作成
GtkWidget * my_image_new(char *path);

// Fontset
My_Font_Desc  *my_font_description(const gchar *fontname);

//Pixmap
GdkPixmap *my_pixmap_new_from_data(GtkWidget *window, char *path);

GtkWidget *my_drawing_area_new(int w, int h, GdkPixmap *pixmap, gboolean relative);

int
my_animation(GtkWidget *window, GtkWidget *drawin_area, gboolean (*handler)(gpointer), int timeout);

// イベント処理 (コールバック) 関数

gint my_close_handler(GtkWidget *widget, gpointer gdata);
void my_button_clicked_handler(GtkWidget *widget, gpointer data);
gboolean my_set_click_and_remove(gboolean);
void my_widget_remove(GtkWidget *);

int my_timeout_add(int timeout, GSourceFunc handler, gpointer widget);

# endif


最終更新日:2015/02/18 13:04:42