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

📄 main.c

📁 linux下 嵌入式minigui下的贪吃蛇游戏源程序 snake game
💻 C
📖 第 1 页 / 共 5 页
字号:
/*** $Id: russia.c,v 1.10 2003/08/15 08:45:46 weiym Exp $**** russia.c: little game russia black** ** Copyright (C) 2001 ~ 2002 Song Lixin and others.** Copyright (C) 2003 Feynman Software.*//***  This source is free software; you can redistribute it and/or**  modify it under the terms of the GNU General Public**  License as published by the Free Software Foundation; either**  version 2 of the License, or (at your option) any later version.****  This software is distributed in the hope that it will be useful,**  but WITHOUT ANY WARRANTY; without even the implied warranty of**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU**  General Public License for more details.****  You should have received a copy of the GNU General Public**  License along with this library; if not, write to the Free**  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,**  MA 02111-1307, USA*/#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <time.h>#include <string.h>#include <sys/time.h>#include <pthread.h>#include <semaphore.h>#include <pwd.h>#include <sys/types.h>#include <syslog.h>#include <assert.h>#include <minigui/common.h>#include <minigui/minigui.h>#include <minigui/gdi.h>#include <minigui/window.h>#include <minigui/control.h>#include "snake.h"#define ETCFILENAME "RussiaSquare.conf"#define DIFFICULTY_HOP  5000#define HIGHEST_SCORE 1000000#define ID_NEWONE               8000#define ID_NEWTWO  		8010#define ID_NEWTWOTEASE      8011#define ID_HIGHSCORE 		8020#define ID_EXIT			8040#define ID_KEYSARRANGE 	8500#define ID_BACKGROUND	8520#define ID_ABOUT		9010		#define  WIDTH_LARGEWIN   380#define  HEIGHT_LARGEWIN  520#define RUSSIA_SQUARE_TIMER1 600#define RUSSIA_SQUARE_TIMER2 800//#define RUSSIA_SQUARE_BASIC_INTERVAL 1100#define RUSSIA_SQUARE_HEIGHT 22#define RUSSIA_SQUARE_WIDTH 10#define RUSSIA_SQUARE_GRID  20#define ACTION_INIT 	0#define ACTION_PUTIN    1#define ACTION_LEFT 	2#define ACTION_RIGHT 	3#define ACTION_ROTATE	4#define ACTION_DOWN     5#define LINE_FULL 0#define LINE_EMPTY 1#define LINE_PARTLYFULL 2#define IDC_STATIC_NUMBER_1 10010#define IDC_STATIC_NUMBER_2 10020#define IDC_STATIC_NUMBER_3 10030#define IDC_STATIC_NUMBER_4 10040#define IDC_STATIC_NUMBER_5 10050#define IDC_DIFFICULT_1     10060#define IDC_DIFFICULT_2     10070#define IDC_UP_1	    10080 #define IDC_UP_2	    10090 #define IDC_DOWN_1	    10100 #define IDC_DOWN_2	    10110 #define IDC_LEFT_1	    10120 #define IDC_LEFT_2	    10130 #define	IDC_RIGHT_1	    10140#define	IDC_RIGHT_2         10150#define IDC_ROTATE_1        10160 #define IDC_ROTATE_2        10170 #define IDC_PAUSE_1         10180 #define IDC_PAUSE_2         10190 #define IDC_START_1         10200 #define IDC_START_2         10210 #define IDC_NAMEINPUT       10220#define SETTING_TABLE_ORIGINX 14#define SETTING_TABLE_ORIGINY 14#define SETTING_TABLE_HEIGHT 30#define SETTING_TABLE_WIDTH1 60#define SETTING_TABLE_WIDTH2 120typedef struct {#define SQUARE_NOTHING 		0#define SQUARE_LONG    		1 #define SQUARE_SQUARE  		2 #define SQUARE_HILL    		3#define SQUARE_LEFT_DUCK    	4#define SQUARE_RIGHT_DUCK   	5#define SQUARE_LEFT_CHAIR   	6#define SQUARE_RIGHT_CHAIR  	7//All the type is listed here:// **** **   *    **    **     *            *//      **  ***    **  **      ***        *** 	int iType;#define DIR_NONE    0#define DIR_UP		1#define DIR_DOWN	2#define DIR_LEFT	3#define DIR_RIGHT	4		int iDir;//first,get at a contour of the square,which is a rectangle,//then we get the cordinate of the point at the left up corner.	POINT poOrigin;	POINT poRightBottom;	POINT poAll[4];} MovingSquare;typedef struct {	int iLevel;//rank from 0 to 11	int iScore;//  0--1200000	MovingSquare * pMovingSquare;	MovingSquare *pPreCreatedSquare;    POINT poOrigin;	int   iStateMatrix[RUSSIA_SQUARE_HEIGHT][RUSSIA_SQUARE_WIDTH];	BOOL bBegin;	BOOL bDead;	BOOL bPause;} PlayingWindow;typedef struct {	int iKeyRotate;	int iKeyDown;	int iKeyLeft;	int iKeyRight;	int iKeyStart;    int iKeyPause;		int iDifficulty;//initial difficulty,rank from 0 to 11;} KeySetting;	typedef struct{	char strTitleHolder[50];	int iHighScore;} HighScoreRecord;typedef struct {	PlayingWindow *pPlayingWindow1;	PlayingWindow *pPlayingWindow2;    KeySetting    KeySetting1;	KeySetting    KeySetting2;	HighScoreRecord HighScore[5];	char strEtcFilePath[MAX_PATH+1];	char strText[50];	int   iTempStateMatrix[RUSSIA_SQUARE_HEIGHT][RUSSIA_SQUARE_WIDTH];	BOOL bTease;	BOOL bBusy;} RussiaSquare;		RussiaSquare theApp;static int TimerFreq[12]={5,10,15,20,25,30,35,40,45,50,55,60};int TestMyWinProc(HWND hWnd,int message,WPARAM wParam,LPARAM lParam);void InitMyWinCreateInfo(PMAINWINCREATE pCreateInfo);HMENU createmenu1(void);HMENU createpmenustart(void);HMENU createpmenusetting(void);HMENU createpmenuabout(void);int LineFullEmpty(int *pLine);BOOL InitializeApp(void);void FreePlayingWindow(HWND hWnd);void OnCommandNewOne(HWND hWnd);void OnCommandNewTwo(HWND hWnd);void OnClose(HWND hWnd);void OnDraw(HWND hWnd,HDC hDC);void DrawPlayingWindow( HDC hDC,POINT poStart,\		int iSideLength,PlayingWindow * pPlayingWindow);BOOL OnLeftKeyDown(HWND hWnd,PlayingWindow *pPlayingWindow,int iWhich);BOOL OnRightKeyDown(HWND hWnd,PlayingWindow *pPlayingWindow,int iWhich);BOOL OnRotateKeyDown(HWND hWnd,PlayingWindow *pPlayingWindow,int iWhich);BOOL OnDownKeyDown(HWND hWnd,PlayingWindow *pPlayingWindow,int iWhich);BOOL OnStartKeyDown(HWND hWnd,PlayingWindow *pPlayingWindow,int iWhich);BOOL OnPauseKeyDown(HWND hWnd,PlayingWindow *pPlayingWindow,int iWhich);void OnTimer(HWND hWnd,PlayingWindow *pPlayingWindow,int iWhich);BOOL MoveSquare(PlayingWindow * pPlayingWindow,int iDir);BOOL MoveSquareLong(PlayingWindow * pPlayingWindow,int iAction);BOOL MoveSquareSquare(PlayingWindow * pPlayingWindow,int iAction);BOOL MoveSquareLeftDuck(PlayingWindow * pPlayingWindow,int iAction);BOOL MoveSquareRightDuck(PlayingWindow * pPlayingWindow,int iAction);BOOL MoveSquareHill(PlayingWindow * pPlayingWindow,int iAction);BOOL MoveSquareLeftChair(PlayingWindow * pPlayingWindow,int iAction);BOOL MoveSquareRightChair(PlayingWindow * pPlayingWindow,int iAction);int  PutSquare(PlayingWindow *pPlayingWindow);BOOL WillNotTouch(PlayingWindow *pPlayingWindow);BOOL WillNotTouchLong(PlayingWindow *pPlayingWindow);BOOL WillNotTouchSquare(PlayingWindow *pPlayingWindow);BOOL WillNotTouchLeftDuck(PlayingWindow *pPlayingWindow);BOOL WillNotTouchRightDuck(PlayingWindow *pPlayingWindow);BOOL WillNotTouchHill(PlayingWindow *pPlayingWindow);BOOL WillNotTouchLeftChair(PlayingWindow *pPlayingWindow);BOOL WillNotTouchRightChair(PlayingWindow *pPlayingWindow);int  RemoveFullLines(PlayingWindow * pPlayingWindow,int iWhich);void ConvertRectCord(HWND hWnd,int iWhich,RECT * pRect);void DrawLittleBrick(HDC hDC,POINT poStart,int iSideLength,int iType);BOOL TestPosition(PlayingWindow *pPlayingWindow ,int i,int j);BOOL TestPosition1(PlayingWindow *pPlayingWindow ,int i,int j);void SaveSettingValue(void);static int DialogKeySettingProc(HWND hDlg, int message, WPARAM wParam, LPARAM lParam);static void DialogKeySetting(HWND hWnd);static int DialogHighScoreProc(HWND hDlg, int message, WPARAM wParam, LPARAM lParam);static void DialogHighScore(HWND hWnd);void UpdateHighScore(HWND hWnd,PlayingWindow *pPlayingWindow);void SaveKeySetting(int wParam,int iCtrlID,KeySetting * tempKeySetting);BOOL ConvertScanCode(int wParam,char * strText);BOOL HaveSameKeySetting(KeySetting *pKeySetting);BOOL IncrementScore(PlayingWindow *pPlayingWindow,int iLines);BOOL TeaseTheOtherPlayer(int iWhich,int iBegin,int iLines);DLGTEMPLATE DlgHighScore = {    WS_BORDER | WS_CAPTION,    WS_EX_NONE,    70, 80, 300, 220,    "英雄榜",    0, 0,    6, NULL,    0};CTRLDATA CtrlHighScore [] = {    {        "static",        WS_VISIBLE | SS_CENTER,        14, 30, 280, 20,        IDC_STATIC_NUMBER_1,         "第一名",        0    },    {        "static",        WS_VISIBLE | SS_CENTER,        14, 55, 280, 20,        IDC_STATIC_NUMBER_2,         "第二名",        0    },    {        "static",        WS_VISIBLE | SS_CENTER,        14, 80, 280, 20,        IDC_STATIC_NUMBER_3,         "第三名",        0    },    {        "static",        WS_VISIBLE | SS_CENTER,        14, 105, 280, 20,        IDC_STATIC_NUMBER_4,         "第四名",        0    },    {        "static",        WS_VISIBLE | SS_CENTER,        14, 130, 280, 20,        IDC_STATIC_NUMBER_5,         "第五名",        0    },    {        "button",        WS_VISIBLE | BS_PUSHBUTTON | BS_DEFPUSHBUTTON | WS_TABSTOP,         100, 155, 100, 28,         IDOK,         "确定",        0     }};static void DialogHighScore(HWND hWnd){    DlgHighScore.controls = CtrlHighScore;    theApp.bBusy=TRUE;       DialogBoxIndirectParam (&DlgHighScore, hWnd, DialogHighScoreProc, 0L);    theApp.bBusy=FALSE;   }static int DialogHighScoreProc(HWND hDlg, int message, WPARAM wParam, LPARAM lParam){    char strText[50];    switch (message) {    case MSG_INITDIALOG:		 snprintf(strText,50,"第一名:%s 高分:%d",theApp.HighScore[0].strTitleHolder,theApp.HighScore[0].iHighScore);	 	SetDlgItemText(hDlg,IDC_STATIC_NUMBER_1,strText);	 	snprintf(strText,50,"第二名:%s 高分:%d",theApp.HighScore[1].strTitleHolder,theApp.HighScore[1].iHighScore);	 	SetDlgItemText(hDlg,IDC_STATIC_NUMBER_2,strText);	 	snprintf(strText,50,"第三名:%s 高分:%d",theApp.HighScore[2].strTitleHolder,theApp.HighScore[2].iHighScore);	 	SetDlgItemText(hDlg,IDC_STATIC_NUMBER_3,strText);	 	snprintf(strText,50,"第四名:%s 高分:%d",theApp.HighScore[3].strTitleHolder,theApp.HighScore[3].iHighScore);	 	SetDlgItemText(hDlg,IDC_STATIC_NUMBER_4,strText);	 	snprintf(strText,50,"第五名:%s 高分:%d",theApp.HighScore[4].strTitleHolder,theApp.HighScore[4].iHighScore);	 	SetDlgItemText(hDlg,IDC_STATIC_NUMBER_5,strText);        return 1;            case MSG_COMMAND:        switch (wParam) {        case IDOK:        case IDCANCEL:            EndDialog (hDlg, wParam);            break;        }        break;            }        return DefaultDialogProc (hDlg, message, wParam, lParam);}DLGTEMPLATE DlgKeySetting = {    WS_BORDER | WS_CAPTION,    WS_EX_NONE,    70, 80,350 , 360,    "输入",    0, 0,    25, NULL,    0};CTRLDATA CtrlKeySetting [] = {	{       		"static",        	WS_VISIBLE | SS_CENTER,			SETTING_TABLE_ORIGINX+SETTING_TABLE_WIDTH1,			SETTING_TABLE_ORIGINY,			SETTING_TABLE_WIDTH2,			SETTING_TABLE_HEIGHT,        	IDC_STATIC,         	"玩家一",        	0    	},	{       		"static",        	WS_VISIBLE | SS_CENTER,			SETTING_TABLE_ORIGINX+SETTING_TABLE_WIDTH1+SETTING_TABLE_WIDTH2,			SETTING_TABLE_ORIGINY,			SETTING_TABLE_WIDTH2,			SETTING_TABLE_HEIGHT,        	IDC_STATIC,         	"玩家二",        	0    	},	{       		"static",        	WS_VISIBLE | SS_CENTER,			SETTING_TABLE_ORIGINX,			SETTING_TABLE_ORIGINY+SETTING_TABLE_HEIGHT,			SETTING_TABLE_WIDTH1,			SETTING_TABLE_HEIGHT,        	IDC_STATIC,         	"难度",        	0    	},    	{        	"edit",        	WS_VISIBLE | WS_BORDER | WS_TABSTOP, 			SETTING_TABLE_ORIGINX+SETTING_TABLE_WIDTH1,			SETTING_TABLE_ORIGINY+SETTING_TABLE_HEIGHT,			SETTING_TABLE_WIDTH2,			SETTING_TABLE_HEIGHT,        	IDC_DIFFICULT_1,         	NULL,        	0    	},    	{        	"edit",        	WS_VISIBLE | WS_BORDER | WS_TABSTOP, 			SETTING_TABLE_ORIGINX+SETTING_TABLE_WIDTH1+SETTING_TABLE_WIDTH2,			SETTING_TABLE_ORIGINY+SETTING_TABLE_HEIGHT,			SETTING_TABLE_WIDTH2,			SETTING_TABLE_HEIGHT,        	IDC_DIFFICULT_2,         	NULL,        	0    	},		{       		"static",        	WS_VISIBLE | SS_CENTER,			SETTING_TABLE_ORIGINX,			SETTING_TABLE_ORIGINY+SETTING_TABLE_HEIGHT*2,			SETTING_TABLE_WIDTH1,			SETTING_TABLE_HEIGHT,        	IDC_STATIC,         	"下",        	0    	},    	{        	"edit",        	WS_VISIBLE | WS_BORDER | WS_TABSTOP, 			SETTING_TABLE_ORIGINX+SETTING_TABLE_WIDTH1,			SETTING_TABLE_ORIGINY+SETTING_TABLE_HEIGHT*2,			SETTING_TABLE_WIDTH2,			SETTING_TABLE_HEIGHT,        	IDC_DOWN_1,         	NULL,

⌨️ 快捷键说明

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