コード:
//dayData.h
struct dayData{
char name[41];//ファイル名を入れる変数
char number[6];
} ;
//draw_clock.h
void draw_clock(struct dayData* day);//時計描画
void draw_face(struct dayData* day);//キャラクター目パチのアニメーション関数
void draw_mouse(struct dayData* day);//キャラクターの口元のアニメーション関数
void Load_Graph();//グラフィックをロード
extern int GHandle[18];
//Setup.h
void Setup_load(struct dayData* day);//設定のロード
void Setup_save(struct dayData* day);//設定のセーブ
extern int character;
extern int ch;
extern int clock_x;
extern int clock_y;
extern int chara_x;
extern int chara_y;
extern int wait_time;
//date.cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "dayData.h"
#include "draw_clock.h"
#include "DxLib.h"
#include "Setup.h"
#pragma warning ( disable : 4996 )
int SHandle;
void date(struct dayData* day){//日付を音声再生する関数
time_t timer;
struct tm *local;
timer = time(NULL);//現在時刻を取得
local = localtime(&timer); //地方時に変換
int volume = (day + 7) -> number[0] * 100 + (day + 7) -> number[1] * 10 + (day + 7) -> number[2];//ボリュームは0~255 初期設定では255
for(int i = 62; i<123; i++){
int hiduke = 1;
bool sound = false;
switch(local->tm_mon + 1){
case 1:
hiduke = strcmp((day+i+ch)->name, (day+62+ch)->name);
if( !hiduke )sound = true;
break;
case 2:
hiduke = strcmp((day+i+ch)->name, (day+63+ch)->name);
if( !hiduke )sound = true;
break;
case 3:
hiduke = strcmp((day+i+ch)->name, (day+64+ch)->name);
if( !hiduke )sound = true;
break;
case 4:
hiduke = strcmp((day+i+ch)->name, (day+65+ch)->name);
if( !hiduke )sound = true;
break;
case 5:
hiduke = strcmp((day+i+ch)->name, (day+66+ch)->name);
if( !hiduke )sound = true;
break;
case 6:
hiduke = strcmp((day+i+ch)->name, (day+67+ch)->name);
if( !hiduke )sound = true;
break;
case 7:
hiduke = strcmp((day+i+ch)->name, (day+68+ch)->name);
if( !hiduke )sound = true;
break;
case 8:
hiduke = strcmp((day+i+ch)->name, (day+69+ch)->name);
if( !hiduke )sound = true;
break;
case 9:
hiduke = strcmp((day+i+ch)->name, (day+70+ch)->name);
if( !hiduke )sound = true;
break;
case 10:
hiduke = strcmp((day+i+ch)->name, (day+71+ch)->name);
if( !hiduke )sound = true;
break;
case 11:
hiduke = strcmp((day+i+ch)->name, (day+72+ch)->name);
if( !hiduke )sound = true;
break;
case 12:
hiduke = strcmp((day+i+ch)->name, (day+73+ch)->name);
if( !hiduke )sound = true;
break;
}
if(sound){//音声再生フラグがon
SHandle = LoadSoundMem( (day + i + ch) -> name ) ;
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
}
SHandle = LoadSoundMem( (day + 109 + ch) -> name ) ;//がつ
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
int date[2];
date[0] = (local->tm_mday / 10)%10;//十の位
date[1] = local->tm_mday % 10;//一の位
for(int i = 62; i<123; i++){
int hiduke = 1;
bool sound = false;
switch(date[0]){
case 1:
if(date[1]){
hiduke = strcmp((day+i+ch)->name, (day+71+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+121+ch)->name);//十日 今の音声は"じゅう"
if( !hiduke )sound = true;
}
break;
case 2:
if(date[1]){
hiduke = strcmp((day+i+ch)->name, (day+74+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+122+ch)->name);//二十日 今の音声は"にじゅう"
if( !hiduke )sound = true;
}
break;
case 3:
hiduke = strcmp((day+i+ch)->name, (day+75+ch)->name);
if( !hiduke )sound = true;
break;
}
if(sound){//音声再生フラグがon
SHandle = LoadSoundMem( (day + i + ch) -> name ) ;
ChangeVolumeSoundMem( volume, SHandle ) ;
if(date[0])PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
}
for(int i = 62; i<123; i++){
int hiduke = 1;
bool sound = false;
switch(date[1]){
case 0:
if(date[0] == 3){
hiduke = strcmp((day+i+ch)->name, (day+62+ch)->name);
if( !hiduke )sound = true;
}
break;
case 1:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+62+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+112+ch)->name);//一日 今の音声は"いち"
if( !hiduke )sound = true;
}
break;
case 2:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+63+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+113+ch)->name);//二日
if( !hiduke )sound = true;
}
break;
case 3:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+64+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+114+ch)->name);//3日
if( !hiduke )sound = true;
}
break;
case 4:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+65+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+115+ch)->name);//4日
if( !hiduke )sound = true;
}
break;
case 5:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+66+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+116+ch)->name);//5日
if( !hiduke )sound = true;
}
break;
case 6:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+67+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+117+ch)->name);//6日
if( !hiduke )sound = true;
}
break;
case 7:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+68+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+118+ch)->name);//7日
if( !hiduke )sound = true;
}
break;
case 8:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+69+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+119+ch)->name);//8日
if( !hiduke )sound = true;
}
break;
case 9:
if(date[0]){
hiduke = strcmp((day+i+ch)->name, (day+70+ch)->name);
if( !hiduke )sound = true;
}
else{
hiduke = strcmp((day+i+ch)->name, (day+120+ch)->name);//9日
if( !hiduke )sound = true;
}
break;
}
if(sound){//音声再生フラグがon
if( !(date[0] && !date[1]) ){
SHandle = LoadSoundMem( (day + i + ch) -> name ) ;
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
}
if(date[0] && date[1] || date[0] == 3){
while( CheckSoundMem( SHandle) == 1 ){ }// なり終わるまでここでループ
SHandle = LoadSoundMem( (day + 110 + ch) -> name ) ;//にち
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle, DX_PLAYTYPE_BACK ) ;
}
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
}
for(int i = 62; i<123; i++){
int hiduke = 1;
bool sound = false;
switch(local->tm_wday){
case 0:
hiduke = strcmp((day+i+ch)->name, (day+78+ch)->name);
if( !hiduke )sound = true;
break;
case 1:
hiduke = strcmp((day+i+ch)->name, (day+79+ch)->name);
if( !hiduke )sound = true;
break;
case 2:
hiduke = strcmp((day+i+ch)->name, (day+80+ch)->name);
if( !hiduke )sound = true;
break;
case 3:
hiduke = strcmp((day+i+ch)->name, (day+81+ch)->name);
if( !hiduke )sound = true;
break;
case 4:
hiduke = strcmp((day+i+ch)->name, (day+82+ch)->name);
if( !hiduke )sound = true;
break;
case 5:
hiduke = strcmp((day+i+ch)->name, (day+83+ch)->name);
if( !hiduke )sound = true;
break;
case 6:
hiduke = strcmp((day+i+ch)->name, (day+84+ch)->name);
if( !hiduke )sound = true;
break;
}
if(sound){//音声再生フラグがon
SHandle = LoadSoundMem( (day + i + ch) -> name ) ;
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
}
SHandle = LoadSoundMem( (day + 111 + ch) -> name ) ;//です
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
InitSoundMem() ;//サウンドデータの削除
}
//draw_clock.cpp
#include <time.h>
#include "DxLib.h"
#include "dayData.h"
#include "Setup.h"
#pragma warning ( disable : 4996 )
extern int SHandle;
#define chara_width 64
#define needle_x clock_x + 96
#define needle_y clock_y + 96
#define FontSize 16
#define PI 3.1415926535897932384626433832795f
int GHandle[18];
int GHandle_F[5][16];
void draw_clock(struct dayData* day){//時計描画関数
time_t timer;
struct tm *local;
timer = time(NULL);//現在時刻を取得
local = localtime(&timer); //地方時に変換
DrawGraph( clock_x , clock_y , GHandle[0] , TRUE ) ;//文字盤
DrawRotaGraph2( needle_x, needle_y, 1, 1, 1.0,( (local->tm_hour%12)*30 + (local->tm_min/2) + 180)*PI/180, GHandle[1], TRUE ) ;//短針 時間*30度%12時間 + 分/2 1分毎に0.5度づつ進む為/2
DrawRotaGraph2( needle_x, needle_y, 1, 1, 1.0,( (local->tm_min*6) + 180)*PI/180, GHandle[2], TRUE ) ;//長針
DrawRotaGraph2( needle_x, needle_y, 1, 1, 1.0,( (local->tm_sec*6) + 180)*PI/180, GHandle[3], TRUE ) ;//秒針
}
void draw_face(struct dayData* day){
static int frmcnt = 0;//フレームカウント
frmcnt++;
//現状の数値は1199フレーム(約20秒) 数列は11990
int blink = (day + 8) -> number[0] * 1000 + (day + 8) -> number[1] * 100 + (day + 8) -> number[2] * 10 + (day + 8) -> number[3];
if(frmcnt % blink >= 0 && frmcnt % blink <= (day + 9) -> number[0] ){
DrawGraph( chara_x , chara_y , GHandle_F[ character ][ 1 ] , TRUE ) ;//2枚目(目パチ) アニメーションスピードは3フレーム
}
else{
DrawGraph( chara_x , chara_y , GHandle_F[ character ][ 0 ] , TRUE ) ;//通常時の顔
}
}
void draw_mouse(struct dayData* day){
static int frmcnt = 0;//フレームカウント
static int arr = 2;
frmcnt++;
DrawGraph( chara_x , chara_y , GHandle_F[ character ][ arr ] , TRUE ) ;//3枚目からアニメーション10枚 アニメーションスピードは3フレーム
if( frmcnt % (day + 10) -> number[0] == 0){
if( CheckSoundMem( SHandle ) == 1 )
arr++;
else
arr = 11;//音声が鳴っていないときは口を閉じる
}
if(arr == 12)arr -= 10;
}
void Load_Graph(){//グラフィックをロードする関数
GHandle[0] = LoadGraph( "Resourse./PNG/mojiban.png" );
GHandle[1] = LoadGraph( "Resourse./PNG/tanshin.png");
GHandle[2] = LoadGraph( "Resourse./PNG/cyoushin.png" );
GHandle[3] = LoadGraph( "Resourse./PNG/byoushin.png");
LoadDivGraph( "Resourse./PNG/face_00.png" , 16 , 4 , 4 , chara_width , chara_width , GHandle_F[0] ) ;
LoadDivGraph( "Resourse./PNG/face_01.png" , 16 , 4 , 4 , chara_width , chara_width , GHandle_F[1] ) ;
LoadDivGraph( "Resourse./PNG/face_02.png" , 16 , 4 , 4 , chara_width , chara_width , GHandle_F[2] ) ;
LoadDivGraph( "Resourse./PNG/face_03.png" , 16 , 4 , 4 , chara_width , chara_width , GHandle_F[3] ) ;
LoadDivGraph( "Resourse./PNG/face_04.png" , 16 , 4 , 4 , chara_width , chara_width , GHandle_F[4] ) ;
}
//main.cpp
#include <windows.h>
#include <process.h>
#include <WindowsX.h>
#include "DxLib.h"
#include "dayData.h"
#include "draw_clock.h"
#include "Setup.h"
#include "resource.h"
#include <windowsx.h>
#include <time.h>
#pragma warning ( disable : 4996 )
#define APP_NAME TEXT("clock")
#define chara_width 64
#define WM_POSTENDTHREAD (WM_USER)// スレッド終了を伝えるメッセージ
#define WM_POSTENDTHREAD2 (WM_USER + 1)// スレッド終了を伝えるメッセージ
#define WM_POSTENDTHREAD3 (WM_USER + 2)// スレッド終了を伝えるメッセージ
#define WM_POSTENDTHREAD4 (WM_USER + 3)// スレッド終了を伝えるメッセージ
#define WM_MENU (WM_USER + 4)
void plan(struct dayData* day);//予定を知らせる
void Time(struct dayData* day);//現在の時間を読み上げる
void date(struct dayData* day);//現在の日付を読み上げる
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK WindowProc2 (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK MyDlgProc(HWND hChild, UINT msg, WPARAM wp, LPARAM lp);
BOOL CALLBACK MyDlgProc2(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
unsigned __stdcall mythread(void *lpx);
unsigned __stdcall mythread_sound(void *lpx);
unsigned __stdcall mythread_jihou(void *lpx);
unsigned __stdcall mythread_plan(void *lpx);
static HANDLE hThread,hThread2,hThread3,hThread4;
static HWND hDlg[3];
static int chara_id;
HINSTANCE hInst;
POINT pt;
struct dayData day[471];
unsigned __stdcall mythread(void *lpx){//メニューを表示するスレッド
WNDCLASSEX wc;
HWND hWnd;
MSG msg;
// ウィンドウクラスの情報を設定
wc.cbSize = sizeof(wc); // 構造体サイズ
wc.style = CS_HREDRAW | CS_VREDRAW; // スタイル
wc.lpfnWndProc = WindowProc2; // ウィンドウプロシージャ
wc.cbClsExtra = 0; // 拡張情報1
wc.cbWndExtra = 0; // 拡張情報2
wc.hInstance = hInst; // インスタンスハンドル
wc.hIcon = (HICON)LoadImage( // アイコン
NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
0, 0, LR_DEFAULTSIZE | LR_SHARED
);
wc.hIconSm = wc.hIcon; // 子アイコン
wc.hCursor = (HCURSOR)LoadImage( // マウスカーソル
NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
0, 0, LR_DEFAULTSIZE | LR_SHARED
);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景
wc.lpszMenuName = NULL; // メニュー名
wc.lpszClassName = _T("Default Class Name");// ウィンドウクラス名
// ウィンドウクラスを登録する
RegisterClassEx( &wc );
// ウィンドウを作成する
hWnd = CreateWindow(
wc.lpszClassName, // ウィンドウクラス名
_T("Sample Program"), // タイトルバーに表示する文字列
WS_OVERLAPPEDWINDOW, // ウィンドウの種類
CW_USEDEFAULT, // ウィンドウを表示する位置(X座標)
CW_USEDEFAULT, // ウィンドウを表示する位置(Y座標)
CW_USEDEFAULT, // ウィンドウの幅
CW_USEDEFAULT, // ウィンドウの高さ
NULL, // 親ウィンドウのウィンドウハンドル
NULL, // メニューハンドル
hInst, // インスタンスハンドル
NULL // その他の作成データ
);
if( hWnd == NULL ){ return 1; }
ShowWindow( hWnd, SW_HIDE );//ウィンドウを表示しない
UpdateWindow( hWnd );
while( 1 )
{
BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // メッセージを取得する
if( ret == 0 || ret == -1 )
{
// アプリケーションを終了させるメッセージが来ていたら、
// あるいは GetMessage() が失敗したら( -1 が返されたら )、ループを抜ける
break;
}
else
{
// メッセージを処理する
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
return 0;
}
unsigned __stdcall mythread_sound(void *lpx){//メニューを表示するスレッド
date(day);//日付を再生
Sleep(wait_time);//間をあける
Time(day);//時刻を再生
Sleep(wait_time);//間をあける
plan(day);
SendMessage(GetMainWindowHandle(), WM_POSTENDTHREAD2, 0, 0);
return 0;
}
unsigned __stdcall mythread_jihou(void *lpx){//時報スレッド
Time(day);
PostMessage(GetMainWindowHandle(), WM_POSTENDTHREAD3, 0, 0);
return 0;
}
unsigned __stdcall mythread_plan(void *lpx){//予定スレッド
plan(day);
SendMessage(GetMainWindowHandle(), WM_POSTENDTHREAD4, 0, 0);
return 0;
}
BOOL CALLBACK MyDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
static HWND ComboBox,Radio[4],Check[21];
static int cancel_id;
switch(msg) {
case WM_COMMAND:
switch(LOWORD(wp)) {
case IDOK:
Button_GetCheck(Radio[0]) ? (day + 3) -> number[0] = 1 : (day + 3) -> number[0] = 0;
Button_GetCheck(Radio[2]) ? (day + 5) -> number[0] = 1 : (day + 5) -> number[0] = 0;
for(int i = 0;i<21;i++){
Button_GetCheck(Check[i]) ? (day + i + 15) -> number[0] = 1 : (day + i + 15) -> number[0] = 0;
}
(day + 4) -> number[0] = chara_id;
Setup_save(day);//設定を書き込む
Setup_load(day);//変更された設定を読み込む
SendMessage(hWnd,WM_CLOSE,0,0);
return TRUE;
case IDCANCEL:
(day + 4) -> number[0] = cancel_id;
Setup_save(day);//設定を書き込む
Setup_load(day);//変更された設定を読み込む
SendMessage(hWnd,WM_CLOSE,0,0);
return TRUE;
case IDC_COMBO1:
chara_id = ComboBox_GetCurSel(ComboBox);
(day + 4) -> number[0] = chara_id;
Setup_save(day);//設定を書き込む
Setup_load(day);//変更された設定を読み込む
return TRUE;
}
return FALSE;
case WM_INITDIALOG:
{
Radio[0] = GetDlgItem(hWnd,IDC_RADIO1);
Radio[1] = GetDlgItem(hWnd,IDC_RADIO2);
Radio[2] = GetDlgItem(hWnd,IDC_RADIO3);
Radio[3] = GetDlgItem(hWnd,IDC_RADIO4);
Check[0] = GetDlgItem(hWnd,IDC_CHECKBOX1);
Check[1] = GetDlgItem(hWnd,IDC_CHECKBOX2);
Check[2] = GetDlgItem(hWnd,IDC_CHECKBOX3);
Check[3] = GetDlgItem(hWnd,IDC_CHECKBOX4);
Check[4] = GetDlgItem(hWnd,IDC_CHECKBOX5);
Check[5] = GetDlgItem(hWnd,IDC_CHECKBOX6);
Check[6] = GetDlgItem(hWnd,IDC_CHECKBOX7);
Check[7] = GetDlgItem(hWnd,IDC_CHECKBOX8);
Check[8] = GetDlgItem(hWnd,IDC_CHECKBOX9);
Check[9] = GetDlgItem(hWnd,IDC_CHECKBOX10);
Check[10] = GetDlgItem(hWnd,IDC_CHECKBOX11);
Check[11] = GetDlgItem(hWnd,IDC_CHECKBOX12);
Check[12] = GetDlgItem(hWnd,IDC_CHECKBOX13);
Check[13] = GetDlgItem(hWnd,IDC_CHECKBOX14);
Check[14] = GetDlgItem(hWnd,IDC_CHECKBOX15);
Check[15] = GetDlgItem(hWnd,IDC_CHECKBOX16);
Check[16] = GetDlgItem(hWnd,IDC_CHECKBOX17);
Check[17] = GetDlgItem(hWnd,IDC_CHECKBOX18);
Check[18] = GetDlgItem(hWnd,IDC_CHECKBOX19);
Check[19] = GetDlgItem(hWnd,IDC_CHECKBOX20);
Check[20] = GetDlgItem(hWnd,IDC_CHECKBOX21);
ComboBox = GetDlgItem( hWnd, IDC_COMBO1);
ComboBox_AddString(ComboBox,"A");
ComboBox_AddString(ComboBox,"B");
ComboBox_AddString(ComboBox,"C");
ComboBox_AddString(ComboBox,"D");
ComboBox_AddString(ComboBox,"E");
cancel_id = chara_id = (day + 4)->number[0];
ComboBox_SetCurSel(ComboBox,chara_id);
(day + 3) -> number[0] ? Button_SetCheck(Radio[0] , BST_CHECKED) : Button_SetCheck(Radio[1] , BST_CHECKED);
(day + 5) -> number[0] ? Button_SetCheck(Radio[2] , BST_CHECKED) : Button_SetCheck(Radio[3] , BST_CHECKED);
for(int i = 0;i<21;i++){
(day + i + 15) -> number[0] ? Button_SetCheck(Check[i] , BST_CHECKED) : Button_SetCheck(Check[i] , BST_UNCHECKED);
}
ShowWindow(hWnd, SW_NORMAL);
return TRUE;
}
case WM_CLOSE:
hDlg[0] = 0;
PostMessage(GetMainWindowHandle(), WM_POSTENDTHREAD, 0, 0);// スレッド終了を伝えるメッセージを親ウィンドウに投げる
DestroyWindow(hWnd);
break;
}
return FALSE;
}
BOOL CALLBACK MyDlgProc2(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
switch(msg) {
case WM_COMMAND:
switch(LOWORD(wp)) {
case IDOK:
SendMessage(hWnd,WM_CLOSE,0,0);
return TRUE;
}
return FALSE;
case WM_CLOSE:
hDlg[1] = 0;
PostMessage(GetMainWindowHandle(), WM_POSTENDTHREAD, 0, 0);// スレッド終了を伝えるメッセージを親ウィンドウに投げる
DestroyWindow(hWnd);
break;
}
return FALSE;
}
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
static int top,left;
static volatile bool flag = false;
switch(uMsg) {
case WM_CREATE:
Setup_load(day);//設定を読み込む
left= (day + 0) -> number[0] * 1000 +
(day + 0) -> number[1] * 100 +
(day + 0) -> number[2] * 10 +
(day + 0) -> number[3];
top = (day + 1) -> number[0] * 1000 +
(day + 1) -> number[1] * 100 +
(day + 1) -> number[2] * 10 +
(day + 1) -> number[3];
break;
case WM_MOVING:
{
LPRECT p = (LPRECT)lParam;
top = p -> top;
left = p -> left;
break;
}
case WM_WINDOWPOSCHANGING:
{
WINDOWPOS* p = (WINDOWPOS*)lParam;
p -> y = top;
p -> x = left;
break;
}
case WM_NCHITTEST:
return HTCAPTION;
case WM_LBUTTONDOWN:
{
// マウス状態管理用変数
int nClickNow = 0 , nClickPrev = 0;
// マウス状態の更新
nClickNow = (GetMouseInput() & MOUSE_INPUT_LEFT);
if( nClickNow != nClickPrev){
int MouseX = 0,MouseY = 0;
GetMousePoint( &MouseX , &MouseY ) ;// マウスの位置を取得
if(MouseX > chara_x && MouseX < chara_x + chara_width && MouseY > chara_y && MouseY < chara_y + chara_width ){
if (!hThread2 && !hThread3 && !hThread4) {
hThread2 = (HANDLE)_beginthreadex(NULL, 0, mythread_sound, NULL, 0, NULL);
}
}
}
SendMessage(GetMainWindowHandle(), WM_NCLBUTTONDOWN, HTCAPTION, 0);
// 今回のクリック状態を保持する
nClickPrev = nClickNow;
break;
}
case WM_RBUTTONDOWN:
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
if(!flag)hThread = (HANDLE)_beginthreadex(NULL, 0, mythread, NULL, 0, NULL);//メニューを表示するスレッドを開始
flag = true;
break;
case WM_POSTENDTHREAD:
if (WaitForSingleObject(hThread, 0) != WAIT_TIMEOUT || hDlg[0] == 0 || hDlg[1] == 0) {
// スレッドの終了を検知できたら戻り値を取得してハンドルをクローズ
flag = false;
DWORD ExitCode;
ExitCode = -1;
GetExitCodeThread(hThread, &ExitCode);
CloseHandle(hThread);
hThread = NULL;
}
else {
// まだスレッドが終了してなかったらメッセージを投げ直す
// ※デッドロック回避のため
PostMessage(hWnd, WM_POSTENDTHREAD, wParam, lParam);
}
break;
case WM_POSTENDTHREAD2:
if (WaitForSingleObject(hThread2, 0) != WAIT_TIMEOUT || hThread2) {
// スレッドの終了を検知できたら戻り値を取得してハンドルをクローズ
DWORD ExitCode;
ExitCode = -1;
GetExitCodeThread(hThread2, &ExitCode);
CloseHandle(hThread2);
hThread2 = NULL;
}
else {
// まだスレッドが終了してなかったらメッセージを投げ直す
// ※デッドロック回避のため
PostMessage(hWnd, WM_POSTENDTHREAD2, wParam, lParam);
}
break;
case WM_POSTENDTHREAD3:
if (WaitForSingleObject(hThread3, 0) != WAIT_TIMEOUT || hThread3) {
// スレッドの終了を検知できたら戻り値を取得してハンドルをクローズ
DWORD ExitCode;
ExitCode = -1;
GetExitCodeThread(hThread3, &ExitCode);
CloseHandle(hThread3);
hThread3 = NULL;
}
else {
// まだスレッドが終了してなかったらメッセージを投げ直す
// ※デッドロック回避のため
PostMessage(hWnd, WM_POSTENDTHREAD3, wParam, lParam);
}
break;
case WM_POSTENDTHREAD4:
if (WaitForSingleObject(hThread4, 0) != WAIT_TIMEOUT || hThread4) {
// スレッドの終了を検知できたら戻り値を取得してハンドルをクローズ
DWORD ExitCode;
ExitCode = -1;
GetExitCodeThread(hThread4, &ExitCode);
CloseHandle(hThread4);
hThread4 = NULL;
}
else {
// まだスレッドが終了してなかったらメッセージを投げ直す
// ※デッドロック回避のため
PostMessage(hWnd, WM_POSTENDTHREAD4, wParam, lParam);
}
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return 0;
}
LRESULT CALLBACK WindowProc2 (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {//メニュー関連のプロシージャ
switch(uMsg) {
case WM_CREATE:
if( !hDlg[0] && !hDlg[1]){
HMENU hMenu,hSubMenu;
hMenu = LoadMenu(hInst,"MYMENU");
hSubMenu = GetSubMenu(hMenu ,0);
ClientToScreen(GetMainWindowHandle() , &pt);
SetForegroundWindow(hWnd);
TrackPopupMenu(hSubMenu,TPM_LEFTALIGN,pt.x,pt.y,0,hWnd,NULL);//メニュー作成
DestroyMenu(hMenu);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDM_OPTION://オプションを選択
//オプション画面のダイアログボックスを作成
if(!hDlg[0] && !hDlg[1])hDlg[0] = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG), GetMainWindowHandle(), MyDlgProc);
break;
case IDM_EXIT://終了を選択
Setup_save(day);//設定を書き込む
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
case IDM_VERSION://バージョン情報を選択
//バージョン情報の画面のダイアログボックスを作成
if(!hDlg[0] && !hDlg[1])hDlg[1] = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG2), GetMainWindowHandle(), MyDlgProc2);
break;
}
break;
case WM_CLOSE:
SendMessage(GetMainWindowHandle(), WM_POSTENDTHREAD, 0, 0);// スレッド終了を伝えるメッセージを親ウィンドウに投げる
SendMessage(GetMainWindowHandle(), WM_CLOSE,0,0);
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);//Getmessageの返り値が0になる
break;
default:
return ( DefWindowProc(hWnd , uMsg , wParam , lParam) );
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
if(FindWindow(APP_NAME , NULL) != NULL ){
MessageBox(NULL , TEXT("多重起動を確認しました") , NULL , MB_OK);
return 0;
}
// 画面モードの変更
SetGraphMode( 1680 , 1050 , 32 ) ;//パソコンの解像度に合わせる
SetMainWindowText("clock");
ChangeWindowMode( TRUE );
SetUseBackBufferTransColorFlag( TRUE );// ウインドウの透過色モードON
SetWindowStyleMode(2);
SetAlwaysRunFlag( TRUE );
SetHookWinProc( WindowProc );
if ( DxLib_Init( ) == -1 ) return -1;
SetDrawScreen(DX_SCREEN_BACK);
Load_Graph();//画像を読み込む
hThread4 = (HANDLE)_beginthreadex(NULL, 0, mythread_plan, NULL, 0, NULL);
while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) {
ClearDrawScreen( );
if(!hThread2 && !hThread3 && !hThread4)draw_face(day);//音声再生するスレッドが作成されてない時の顔は目パチ
if(hThread2 || hThread3 || hThread4)draw_mouse(day);//音声再生スレッド中は口パク
draw_clock(day);
time_t timer;
struct tm *local;
timer = time(NULL);//現在時刻を取得
local = localtime(&timer); //地方時に変換
int min[2],sec[2];
min[0] = (local->tm_min / 10)%10;
min[1] = local->tm_min % 10;
sec[0] = (local->tm_sec / 10)%10;
sec[1] = local->tm_sec % 10;
if( !min[0] && !min[1] && !sec[0] && !sec[1] && ( day + 5 ) -> number[0] ){
if(!hThread2 && !hThread3 && !hThread4){
hThread3 = (HANDLE)_beginthreadex(NULL, 0, mythread_jihou, NULL, 0, NULL);//時報スレッドを開始;
}
}
ScreenFlip( );
}
DxLib_End();
return 0;
}
//plan.cpp
#include "DxLib.h"
#include "dayData.h"
#include "draw_clock.h"
#include "Setup.h"
#include <time.h>
#pragma warning ( disable : 4996 )
extern int SHandle;
void plan(struct dayData* day){//予定や祝日を音声再生する関数
bool alarm = false;
int volume = (day + 7) -> number[0] * 100 + (day + 7) -> number[1] * 10 + (day + 7) -> number[2];//ボリュームは0~255 初期設定では255
time_t timer;
struct tm *local;
timer = time(NULL);//現在時刻を取得
local = localtime(&timer); //地方時に変換
if(!alarm){
for(int i = 0; i<3; i++){
if( local->tm_wday == 1 && (day + 15 + i*7) -> number[0] || local->tm_wday == 2 && (day + 16 + i*7) -> number[0] || local->tm_wday == 3 && (day + 17 + i*7) -> number[0] ||
local->tm_wday == 4 && (day + 18 + i*7) -> number[0] || local->tm_wday == 5 && (day + 19 + i*7) -> number[0] || local->tm_wday == 6 && (day + 20 + i*7) -> number[0] ||
local->tm_wday == 0 && (day + 21 + i*7) -> number[0]){
if( ( day + 3 ) -> number[0] == 0 ){//設定した日 0なら当日 1なら前日
SHandle = LoadSoundMem( (day + 36 + ch) -> name );
}else{//前日設定
SHandle = LoadSoundMem( (day + 37 + ch) -> name );
}
if(!alarm){//この部分は一回だけの再生
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;//今日または明日
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
SHandle = LoadSoundMem( (day + 38 + ch) -> name );
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;//は
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
if(i == 0){ SHandle = LoadSoundMem( (day + 39 + ch) -> name ); ChangeVolumeSoundMem( volume, SHandle ) ; PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;}//燃えるゴミ
else if(i == 1){SHandle = LoadSoundMem( (day + 40 + ch) -> name ); ChangeVolumeSoundMem( volume, SHandle ) ; PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;}//燃えないゴミ
else if(i == 2){SHandle = LoadSoundMem( (day + 41 + ch) -> name ); ChangeVolumeSoundMem( volume, SHandle ) ; PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;}//資源ゴミ
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
Sleep(wait_time);//間をあける
alarm = true;
}
}
for(int i = 42; i<62; i++){
int hiduke = 1;
bool sound = false;
switch(local->tm_yday){
case 0://元日
hiduke = strcmp((day+i)->number, (day+42+ch)->number);
if( !hiduke )sound = true;
break;
case 6://七草
hiduke = strcmp((day+i)->number, (day+43+ch)->number);
if( !hiduke )sound = true;
break;
case 9://成人の日
hiduke = strcmp((day+i)->number, (day+44+ch)->number);
if( !hiduke )sound = true;
break;
case 33://節分
hiduke = strcmp((day+i)->number, (day+45+ch)->number);
if( !hiduke )sound = true;
break;
case 41://建国記念日
hiduke = strcmp((day+i)->number, (day+46+ch)->number);
if( !hiduke )sound = true;
break;
case 79://春分の日
hiduke = strcmp((day+i)->number, (day+47+ch)->number);
if( !hiduke )sound = true;
break;
case 118://昭和の日
hiduke = strcmp((day+i)->number, (day+48+ch)->number);
if( !hiduke )sound = true;
break;
case 122://憲法記念日
hiduke = strcmp((day+i)->number, (day+49+ch)->number);
if( !hiduke )sound = true;
break;
case 123://みどりの日
hiduke = strcmp((day+i)->number, (day+50+ch)->number);
if( !hiduke )sound = true;
break;
case 124://こどもの日
hiduke = strcmp((day+i)->number, (day+51+ch)->number);
if( !hiduke )sound = true;
break;
case 160://海の日
hiduke = strcmp((day+i)->number, (day+52+ch)->number);
if( !hiduke )sound = true;
break;
case 261://敬老の日
hiduke = strcmp((day+i)->number, (day+53+ch)->number);
if( !hiduke )sound = true;
break;
case 265://秋分の日
hiduke = strcmp((day+i)->number, (day+54+ch)->number);
if( !hiduke )sound = true;
break;
case 282://体育の日
hiduke = strcmp((day+i)->number, (day+55+ch)->number);
if( !hiduke )sound = true;
break;
case 306://文化の日
hiduke = strcmp((day+i)->number, (day+56+ch)->number);
if( !hiduke )sound = true;
break;
case 318://七五三
hiduke = strcmp((day+i)->number, (day+57+ch)->number);
if( !hiduke )sound = true;
break;
case 326://勤労感謝の日
hiduke = strcmp((day+i)->number, (day+58+ch)->number);
if( !hiduke )sound = true;
break;
case 356://天皇誕生日
hiduke = strcmp((day+i)->number, (day+59+ch)->number);
if( !hiduke )sound = true;
break;
case 357://クリスマスイヴ
hiduke = strcmp((day+i)->number, (day+60+ch)->number);
if( !hiduke )sound = true;
break;
case 358://クリスマス
hiduke = strcmp((day+i)->number, (day+61+ch)->number);
if( !hiduke )sound = true;
break;
}
if(sound){//音声再生フラグがon
SHandle = LoadSoundMem( (day + i + ch) -> name ) ;
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
}
}
InitSoundMem() ;//サウンドデータの削除
}
//Setup.cpp
#include "DxLib.h"
#include "dayData.h"
#include "draw_clock.h"
#pragma warning ( disable : 4800 )
#pragma warning ( disable : 4804 )
#define FontSize 16
#define menu_x chara_x
#define menu_y chara_y + 64
#define menu_width 160//オプション画面の横文字の長さ フォントサイズが16なので10文字分
int character = 0;
int ch = 0;
int chara_x = 0;
int chara_y = 0;
int clock_x = 0;
int clock_y = 0;
int wait_time = 0;
//-----------------------------------------------------------------------------
// Name: Setup_load()
// Desc: 設定読み込み関数
//-----------------------------------------------------------------------------
void Setup_load(struct dayData* day){
char key1[8]="name000";
char key2[8]="data000";
static bool load = false;
//INIファイル読み込み
for(int i = 0; i < 36; i++){
GetPrivateProfileString("Setup",key1,"--------", (day+i) -> name,41,"Resourse./Setup.INI");
GetPrivateProfileString("Setup",key2,"00000" , (day+i) -> number,6,"Resourse./Setup.INI");
key1[6]++;
key2[6]++;
if(key1[6] == ':'){ key1[5]++; key1[6] = '0';}//10の位をプラス 1の位を0に
if(key2[6] == ':'){ key2[5]++; key2[6] = '0';}
if(key1[5] == ':'){ key1[4]++; key1[5] = '0';}//100の位をプラス 10の位を0に
if(key2[5] == ':'){ key2[4]++; key2[5] = '0';}
for(int j = 0;j<5;j++){
(day+i) -> number[j] -= '0';//アスキーコードから数字に変換
}
}
character = ( day + 4 ) -> number[0] ;
ch = character * 87;
//セリフとセリフの間を決める変数
wait_time = (day + 6) -> number[0] * 10000 + (day + 6) -> number[1] * 1000 + (day + 6) -> number[2] * 100 + (day + 6) -> number[3] * 10 + (day + 6) -> number[4];
chara_x = (day + 11) -> number[0] * 1000 + (day + 11) -> number[1] * 100 + (day + 11) -> number[2] * 10 + (day + 11) -> number[3];
chara_y = (day + 12) -> number[0] * 1000 + (day + 12) -> number[1] * 100 + (day + 12) -> number[2] * 10 + (day + 12) -> number[3];
clock_x = (day + 13) -> number[0] * 1000 + (day + 13) -> number[1] * 100 + (day + 13) -> number[2] * 10 + (day + 13) -> number[3];
clock_y = (day + 14) -> number[0] * 1000 + (day + 14) -> number[1] * 100 + (day + 14) -> number[2] * 10 + (day + 14) -> number[3];
//INIファイル読み込み
if( load == false ){
load = true;
for(int i = 36; i < 471; i++){
GetPrivateProfileString("Setup",key1,"--------", (day+i) -> name,41,"Resourse./Setup.INI");
GetPrivateProfileString("Setup",key2,"00000" , (day+i) -> number,6,"Resourse./Setup.INI");
key1[6]++;
key2[6]++;
if(key1[6] == ':'){ key1[5]++; key1[6] = '0';}//10の位をプラス 1の位を0に
if(key2[6] == ':'){ key2[5]++; key2[6] = '0';}
if(key1[5] == ':'){ key1[4]++; key1[5] = '0';}//100の位をプラス 10の位を0に
if(key2[5] == ':'){ key2[4]++; key2[5] = '0';}
}
}
}
//-----------------------------------------------------------------------------
// Name: Setup_save()
// Desc: 設定書き込み関数
//-----------------------------------------------------------------------------
void Setup_save(struct dayData* day){
char key1[8]="name000";
char key2[8]="data000";
RECT rect;
GetWindowRect(GetMainWindowHandle(),&rect);//ウィンドウの座標を取得
(day + 0) -> number[0] = (rect.left / 1000) % 10;//ウィンドウのx座標を代入
(day + 0) -> number[1] = (rect.left / 100) % 10;
(day + 0) -> number[2] = (rect.left / 10) % 10;
(day + 0) -> number[3] = rect.left % 10;
(day + 1) -> number[0] = (rect.top / 1000) % 10;//ウィンドウのy座標を代入
(day + 1) -> number[1] = (rect.top / 100) % 10;
(day + 1) -> number[2] = (rect.top / 10) % 10;
(day + 1) -> number[3] = rect.top % 10;
//INIファイル書き込み
for(int i = 0; i < 36; i++){
for(int j = 0;j<5;j++){
(day+i) -> number[j] += '0';//数字からアスキーコードに変換
}
WritePrivateProfileString("Setup",key1, (day+i) -> name,"Resourse./Setup.INI");
WritePrivateProfileString("Setup",key2, (day+i) -> number,"Resourse./Setup.INI");
key1[6]++;
key2[6]++;
if(key1[6] == ':'){ key1[5]++; key1[6] = '0';}
if(key2[6] == ':'){ key2[5]++; key2[6] = '0';}
if(key1[5] == ':'){ key1[4]++; key1[5] = '0';}
if(key2[5] == ':'){ key2[4]++; key2[5] = '0';}
}
}
//time.cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "dayData.h"
#include "draw_clock.h"
#include "DxLib.h"
#include "Setup.h"
#pragma warning ( disable : 4996 )
extern int SHandle;
void Time(struct dayData* day){//現在の時間を音声再生する関数
time_t timer;
struct tm *local;
timer = time(NULL);//現在時刻を取得
local = localtime(&timer); //地方時に変換
int volume = (day + 7) -> number[0] * 100 + (day + 7) -> number[1] * 10 + (day + 7) -> number[2];//ボリュームは0~255 初期設定では255
for(int i = 62; i<123; i++){
int hiduke = 1;
bool sound = false;
int hour = local->tm_hour % 12;
switch(hour){
case 0:
hiduke = strcmp((day+i+ch)->name, (day+85+ch)->name);
if( !hiduke )sound = true;
break;
case 1:
hiduke = strcmp((day+i+ch)->name, (day+86+ch)->name);
if( !hiduke )sound = true;
break;
case 2:
hiduke = strcmp((day+i+ch)->name, (day+87+ch)->name);
if( !hiduke )sound = true;
break;
case 3:
hiduke = strcmp((day+i+ch)->name, (day+88+ch)->name);
if( !hiduke )sound = true;
break;
case 4:
hiduke = strcmp((day+i+ch)->name, (day+89+ch)->name);
if( !hiduke )sound = true;
break;
case 5:
hiduke = strcmp((day+i+ch)->name, (day+90+ch)->name);
if( !hiduke )sound = true;
break;
case 6:
hiduke = strcmp((day+i+ch)->name, (day+91+ch)->name);
if( !hiduke )sound = true;
break;
case 7:
hiduke = strcmp((day+i+ch)->name, (day+92+ch)->name);
if( !hiduke )sound = true;
break;
case 8:
hiduke = strcmp((day+i+ch)->name, (day+93+ch)->name);
if( !hiduke )sound = true;
break;
case 9:
hiduke = strcmp((day+i+ch)->name, (day+94+ch)->name);
if( !hiduke )sound = true;
break;
case 10:
hiduke = strcmp((day+i+ch)->name, (day+95+ch)->name);
if( !hiduke )sound = true;
break;
case 11:
hiduke = strcmp((day+i+ch)->name, (day+96+ch)->name);
if( !hiduke )sound = true;
break;
}
if(sound){//音声再生フラグがon
SHandle = LoadSoundMem( (day+i+ch) -> name ) ;
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
}
int min[2];
min[0] = (local->tm_min / 10)%10;
min[1] = local->tm_min % 10;
for(int i = 62; i<123; i++){
int hiduke = 1;
bool sound = false;
switch(min[0]){
case 1:
hiduke = strcmp((day+i+ch)->name, (day+71+ch)->name);
if( !hiduke )sound = true;
break;
case 2:
hiduke = strcmp((day+i+ch)->name, (day+74+ch)->name);
if( !hiduke )sound = true;
break;
case 3:
hiduke = strcmp((day+i+ch)->name, (day+75+ch)->name);
if( !hiduke )sound = true;
break;
case 4:
hiduke = strcmp((day+i+ch)->name, (day+76+ch)->name);
if( !hiduke )sound = true;
break;
case 5:
hiduke = strcmp((day+i+ch)->name, (day+77+ch)->name);
if( !hiduke )sound = true;
break;
}
if(sound){//音声再生フラグがon
SHandle = LoadSoundMem( (day+i+ch) -> name ) ;
ChangeVolumeSoundMem( volume, SHandle ) ;
if(min[0])PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
}
for(int i = 62; i<123; i++){
int hiduke = 1;
bool sound = false;
switch(min[1]){
case 0:
if( min[0] ){
hiduke = strcmp((day+i+ch)->name, (day+98+ch)->name);
if( !hiduke )sound = true;
}
break;
case 1:
hiduke = strcmp((day+i+ch)->name, (day+99+ch)->name);
if( !hiduke )sound = true;
break;
case 2:
hiduke = strcmp((day+i+ch)->name, (day+100+ch)->name);
if( !hiduke )sound = true;
break;
case 3:
hiduke = strcmp((day+i+ch)->name, (day+101+ch)->name);
if( !hiduke )sound = true;
break;
case 4:
hiduke = strcmp((day+i+ch)->name, (day+102+ch)->name);
if( !hiduke )sound = true;
break;
case 5:
hiduke = strcmp((day+i+ch)->name, (day+103+ch)->name);
if( !hiduke )sound = true;
break;
case 6:
hiduke = strcmp((day+i+ch)->name, (day+104+ch)->name);
if( !hiduke )sound = true;
break;
case 7:
hiduke = strcmp((day+i+ch)->name, (day+105+ch)->name);
if( !hiduke )sound = true;
break;
case 8:
hiduke = strcmp((day+i+ch)->name, (day+106+ch)->name);
if( !hiduke )sound = true;
break;
case 9:
hiduke = strcmp((day+i+ch)->name, (day+107+ch)->name);
if( !hiduke )sound = true;
break;
}
if(sound){//音声再生フラグがon
SHandle = LoadSoundMem( (day+i+ch) -> name ) ;
ChangeVolumeSoundMem( volume, SHandle ) ;
if(local->tm_min)PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
}
}
SHandle = LoadSoundMem( (day+111+ch)->name ) ;//です
ChangeVolumeSoundMem( volume, SHandle ) ;
PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;
while( CheckSoundMem( SHandle ) == 1 ){ }// なり終わるまでここでループ
InitSoundMem() ;//サウンドデータの削除
}