-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
dimweak
committed
Apr 15, 2023
1 parent
ca76d6e
commit 1018eaf
Showing
10 changed files
with
205 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#include "SDL2/SDL.h" | ||
#include "parameter.h" | ||
|
||
#ifndef PARKOUR_RECT_QUEUE_H | ||
#define PARKOUR_RECT_QUEUE_H | ||
/* 怪物的节点,用于存储怪物的信息 */ | ||
typedef struct RectNode { | ||
SDL_Rect rect; /* 怪物的位置 */ | ||
int rect_index; /* 怪物的索引 */ | ||
int rect_type; /* 怪物的种类,分空中和地面 */ | ||
int monster; /* 怪物的类型,在空中或地面的基础上细分 */ | ||
int is_passed; /* 是否已经被通过 */ | ||
struct RectNode* next; /* 指向下一个节点 */ | ||
} RectNode; | ||
|
||
/* 怪物的队列,用于存储怪物的节点,以链式列表进行存储 */ | ||
typedef struct RectQueue { | ||
RectNode* front; | ||
RectNode* rear; | ||
int size; | ||
} RectQueue; | ||
|
||
RectQueue* InitRectQueue(); | ||
void EnRectQueue(RectQueue* queue, SDL_Rect rect, int rect_type, int monster); | ||
RectNode* DeRectQueue(RectQueue* queue); | ||
void DestroyRectQueue(RectQueue* queue); | ||
void CreateMonsterRectQueue(RectQueue* queue); | ||
void FillMonsterRectQueue(RectQueue* queue); | ||
int random_monster(int monster_type); | ||
#endif |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
#include "manage.h" | ||
|
||
/** | ||
* 加载人物的不同动作的图像资源,对PlayerAction进行初始化 | ||
* @param renderer 窗口的渲染器 | ||
* @param Karyl_actions PlayerAction结构体数组 | ||
*/ | ||
void Load_Karyl_Actions(SDL_Renderer* renderer, PlayerAction* Karyl_actions[]) { | ||
int i; | ||
|
||
/* 初始化每种动作的图片和当前帧数 */ | ||
for(i = 0;i < NUMS_OF_STATE; i++){ | ||
Karyl_actions[i] = Create_Player_Action(); | ||
Karyl_actions[i]->current_frame = 0; | ||
} | ||
|
||
/* 初始化每种动作的总帧数 */ | ||
Karyl_actions[STATE_RUN]->nums_of_frames = FRAMES_RUN; | ||
Karyl_actions[STATE_JUMP]->nums_of_frames = FRAMES_JUMP; | ||
Karyl_actions[STATE_DIE]->nums_of_frames = FRAMES_DIE; | ||
|
||
/* 初始化每种动作的位置 */ | ||
Karyl_actions[STATE_RUN]->rect = KARYL_RUN_RECT; | ||
Karyl_actions[STATE_JUMP]->rect = KARYL_JUMP_RECT; | ||
Karyl_actions[STATE_DIE]->rect = KARYL_DIE_RECT; | ||
|
||
/* 初始化每种动作的surface */ | ||
Set_Player_Action_Surface(Karyl_actions[STATE_RUN], KARYL_RUN_PATH); | ||
Set_Player_Action_Surface(Karyl_actions[STATE_JUMP], KARYL_JUMP_PATH); | ||
Set_Player_Action_Surface(Karyl_actions[STATE_DIE], KARYL_DIE_PATH); | ||
|
||
/* 初始化每种动作的texture */ | ||
Set_Player_Action_Texture(Karyl_actions[STATE_RUN], renderer); | ||
Set_Player_Action_Texture(Karyl_actions[STATE_JUMP], renderer); | ||
Set_Player_Action_Texture(Karyl_actions[STATE_DIE], renderer); | ||
} | ||
|
||
/** | ||
* 重置人物的动作数组 | ||
* @param Karyl_actions PlayerAction结构体数组 | ||
*/ | ||
void Reset_Karyl_Actions(PlayerAction* Karyl_actions[]) { | ||
int i; | ||
|
||
/* 重置每种动作类型的当前帧数 */ | ||
for(i = 0; i < NUMS_OF_STATE; i++) { | ||
Karyl_actions[i]->current_frame = 0; | ||
} | ||
|
||
/* 重置人物的位置 */ | ||
Karyl_actions[STATE_RUN]->rect = KARYL_RUN_RECT; | ||
Karyl_actions[STATE_JUMP]->rect = KARYL_JUMP_RECT; | ||
Karyl_actions[STATE_DIE]->rect = KARYL_DIE_RECT; | ||
|
||
} | ||
|
||
/** | ||
* 释放PlayerAction数组 | ||
* @param Karyl_actions PlayerAction结构体数组 | ||
*/ | ||
void Destroy_Karyl_Actions(PlayerAction* Karyl_actions[]) { | ||
int i; | ||
|
||
for(i = 0; i < NUMS_OF_STATE; i++) { | ||
Destroy_Player_Action(Karyl_actions[i]); | ||
} | ||
} | ||
|
||
/** | ||
* 加载不同怪物类型的图像资源,对MonsterModel数组进行初始化 | ||
* @param renderer 窗口的渲染器 | ||
* @param monster_actions MonsterModel结构体数组 | ||
*/ | ||
void Load_Monster_Model(SDL_Renderer* renderer, MonsterModel* monster_models[]) { | ||
int i, j, nums_of_type; | ||
char path[30]; | ||
|
||
for(i = 0; i < NUMS_OF_MONSTER; i++) { | ||
monster_models[i] = (MonsterModel*)malloc(sizeof(MonsterModel)); | ||
nums_of_type = i == MONSTER_GROUND ? GROUND_TYPE : AIR_TYPE; | ||
|
||
for(j = 0; j < nums_of_type; j++){ | ||
sprintf(path, i==MONSTER_GROUND ? MONSTER_GROUND_PATH : MONSTER_AIR_PATH, j); /* 根据怪物类型和怪物编号格式化路径 */ | ||
monster_models[i]->surface[j] = IMG_Load(path); /* 加载怪物的surface */ | ||
monster_models[i]->texture[j] = SDL_CreateTextureFromSurface(renderer, monster_models[i]->surface[j]); /* 加载怪物的texture */ | ||
} | ||
} | ||
|
||
} | ||
|
||
/** | ||
* 释放MonsterModel数组 | ||
* @param monster_model MonsterModel结构体数组 | ||
*/ | ||
void Destroy_Monster_Models(MonsterModel* monster_model[]) { | ||
Destroy_Monster_Model(monster_model[MONSTER_GROUND], GROUND_TYPE); | ||
Destroy_Monster_Model(monster_model[MONSTER_AIR], AIR_TYPE); | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
#include "SDL2/SDL_image.h" | ||
#include "SDL2/SDL_ttf.h" | ||
#include "Player_Action.h" | ||
#include "Monster_Model.h" | ||
#include "parameter.h" | ||
|
||
#ifndef PARKOUR_LOAD_RESOURCE_H | ||
#define PARKOUR_LOAD_RESOURCE_H | ||
|
||
void Load_Karyl_Actions(SDL_Renderer* renderer, PlayerAction* Karyl_actions[]); | ||
void Load_Monster_Model(SDL_Renderer* renderer, MonsterModel* monster_models[]); | ||
|
||
void Reset_Karyl_Actions(PlayerAction* Karyl_actions[]); | ||
|
||
void Destroy_Karyl_Actions(PlayerAction* Karyl_actions[]); | ||
void Destroy_Monster_Models(MonsterModel* monster_model[]); | ||
|
||
#endif //PARKOUR_LOAD_RESOURCE_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
#include "score.h" | ||
|
||
/** | ||
* 初始化分数 | ||
* @return Score结构体指针 | ||
*/ | ||
Score* InitScore(){ | ||
Score* score = (Score*)malloc(sizeof(Score)); | ||
score->score = 0; | ||
score->surface = NULL; | ||
score->texture = NULL; | ||
return score; | ||
} | ||
|
||
/** | ||
* 销毁分Score结构体 | ||
* @param score Score结构体指针 | ||
*/ | ||
void DestroyScore(Score* score){ | ||
SDL_FreeSurface(score->surface); | ||
SDL_DestroyTexture(score->texture); | ||
free(score); | ||
} | ||
|
||
/** | ||
* 绘制分数 | ||
* @param renderer 窗口的渲染器 | ||
* @param score Score结构体指针 | ||
* @param font 字体 | ||
* @param color 颜色 | ||
*/ | ||
void DrawScore(SDL_Renderer* renderer, Score* score, TTF_Font* font, SDL_Color color){ | ||
char score_str[100]; | ||
sprintf(score_str, "Score: %d", score->score); | ||
SDL_FreeSurface(score->surface); | ||
SDL_DestroyTexture(score->texture); | ||
score->surface = TTF_RenderText_Solid(font, score_str, color); | ||
score->texture = SDL_CreateTextureFromSurface(renderer, score->surface); | ||
SDL_Rect rect = {SCORE_RECT.x, SCORE_RECT.y, score->surface->w/2, score->surface->h/2}; | ||
SDL_RenderCopy(renderer, score->texture, NULL, &rect); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
#include "parameter.h" | ||
#include "SDL2/SDL.h" | ||
#include "SDL2/SDL_ttf.h" | ||
#include <stdio.h> | ||
#ifndef PARKOUR_SCORE_H | ||
#define PARKOUR_SCORE_H | ||
/* 分数,用于存储分数的值、texture和surface */ | ||
typedef struct Score { | ||
int score; | ||
SDL_Texture *texture; | ||
SDL_Surface *surface; | ||
}Score; | ||
Score* InitScore(); | ||
void DestroyScore(Score* score); | ||
void DrawScore(SDL_Renderer* renderer, Score* score, TTF_Font* font, SDL_Color color); | ||
#endif |