zoukankan      html  css  js  c++  java
  • 最新game

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <signal.h>
    #include "game.h"
    #include "engine.h"
    #include "message.h"
    #include "member.h"
    #include <ncurses.h>
    #include "timer.h"
    #include <errno.h>
    
    int gqid=0;
    int current_row=0;
    int current_col=0;
    int message_row=2;
    int message_col=2;
    WINDOW* message_win =NULL;
    WINDOW* input_win   =NULL;
    
    void game_init()
    {
        engine_init();
        gqid=message_init();
        init_member_list();    
        signal(SIGINT, signal_handle);
        signal(EXIT_SIGNAL, signal_handle);
        
        game_create_message_win();    
        game_create_input_win();
        create_thread((void*) game_refresh_member);
        
        STRUCT_MEMBER member;
        member.type=0;
        member.name="sysAdmin";
        regist_member(member);
    
        move(27, 23);
        current_row=27;
        current_col=23;
    }
    
    void game_create_message_win()
    {
        message_win=newwin(20, 70, 2, 2);
        if(message_win !=NULL)
        {
            refresh();
            box(message_win, 0, 0);
            wrefresh(message_win);
        }
    }
    
    
    void game_start()
    {
    }
    
    void game_create_input_win()
    {
        refresh();    
        input_win=newwin(5, 70, 25, 2);
        if(message_win !=NULL)
        {
            refresh();
            box(input_win, 0, 0);
            wrefresh(input_win);    
            mvwprintw(input_win,2,2,"[membername] say:");    
            wrefresh(input_win);
        }
    }
    
    void game_refresh_member()
    {
        
        int i=0;    
        int y =2;
        int x=75;
        int rcv=0;
        STRUCT_MEMBER_LIST list;
        list = get_members();
        STRUCT_MSG_BUF msg={0};    
        
        for(;;){
            y=2;
            x=75;
    
            mvprintw(y,x,"MEMBER %d", list.number);            
            for(i=0;i<list.number;i++)
            {
                mvprintw(++y,x, "[name= %s] [type= %d]",list.members[i].name, list.members[i].type);
            }
            refresh();
    
            rcv = game_receive_msg(&msg);
            
            if(rcv > 0)
            {
                mvwprintw(message_win,message_row,message_col,"[%d,%d,%s]", msg.length,msg.type,msg.data);
                //scrollok(message_win, TRUE);
                //scroll(message_win);
                wrefresh(message_win);
                refresh();
                message_row++;
            }
    
            move(current_row,current_col);
            interval_time(INTERVAL);    
        }
    }
    
    void game_run()
    {    
        char line[70]="";
        int ch=0;
        STRUCT_MSG_BUF msg;
        for(;;)
        {
            //getnstr(line, 70);
            //move(current_row,current_col);
            //printw("%s", line);
            
            ch=getch();    
            
            switch(ch)
            {
                case 'q':
                    raise(SIGINT);
                break;
                case '
    ':
                    mvwprintw(input_win,2,2,"[membername] say:");
                    mvwprintw(input_win,2,23,"                                              ");    
                    wrefresh(input_win);
                    move(27,23);
                    game_send_msg(line, ENUM_MSG_NORMAL);
                    memset(line, 0, strlen(line));
                    //game_receive_msg(&msg);
                break;
                default:
                    if(current_col<70)
                    {    
                        move(current_row,current_col);
                        printw("%c", ch);            
                        refresh();
                        line[strlen(line)]=ch;
                    }
                break;
            }
    
            
            getyx(stdscr, current_row, current_col);    
        }
    }
    
    int game_abort(char* msg)
    {
        engine_shut();
        //fprintf(stderr, "%s
    ", msg);
        exit(EXIT_FAILURE);        
    }
    
    // 
    void game_over()
    {
        engine_shut();
        exit(EXIT_SUCCESS);
    }
    
    
    void game_send_msg(char* pmsg_content, ENUM_MSG_TYPE msgType)
    {    
        STRUCT_MSG_BUF msg={0};
        memset(&msg, 0, sizeof(STRUCT_MSG_BUF));
        msg.length=strlen(pmsg_content);
        msg.type=msgType;
        strncpy(msg.data, pmsg_content, strlen(pmsg_content));    
        message_send(gqid, &msg, 0);
    }
    
    int game_receive_msg(STRUCT_MSG_BUF* pmsg)
    {
        int ret =-1;
        if(pmsg != NULL)
        {
            memset(pmsg, 0, sizeof(STRUCT_MSG_BUF));
            ret = message_receive(gqid, pmsg, IPC_NOWAIT);        
        }
        
        //printw("receive msg %s", pmsg->data);
        //refresh();
    
        return ret;
    }
    
    
    void print_info()
    {
                
    }
    
    void signal_handle(int signal)
    {
        switch(signal)
        {
            case SIGINT:
                game_over();
            break;        
            case EXIT_SIGNAL:
                game_over();
            break;
            default:
            break;
        }
    
    }
    #ifndef __GAME_H
    #define __GAME_H
    
    #include "message.h"
    
    #define FRAME_ROW 0
    #define FRAME_COL 0
    
    #define MSG_BEGIN_COL 3
    #define MSG_END_COL   
    
    
    #define EXIT_SIGNAL 1818
    
    typedef enum tag_mode
    {
        GAME_INIT,
        GAME_RUN,
        GAME_ABORT,
        GAME_OVER
    }ENUM_GAME_MODE;
    
    typedef struct tag_game
    {
        ENUM_GAME_MODE mode;
        int length;
    }STRUCT_GAME;
    
    
    void game_init();
    void game_start();
    int game_abort(char* msg);
    void game_over();
    void game_run();
    //void game_send_msg();
    void game_send_msg(char* pmsg_content, ENUM_MSG_TYPE msgType);
    int game_receive_msg(STRUCT_MSG_BUF* pmsg);
    void game_show_frame();
    void signal_handle(int signal);
    void game_create_input_win();
    void game_refresh_member();
    void game_create_message_win();
    
    #endif
    #ifndef __MESSAGE_H
    #define __MESSAGE_H
    
    #include <sys/msg.h>
    #include <sys/types.h>
    #include <sys/ipc.h>
    
    #define MSG_PATH         "./msg/msg"
    #define MSG_PJID         1818 
    #define MAX_MSG_LENGTH         256
    
    typedef enum tag_msg_type
    {
        ENUM_MSG_REGIST_MEM     = 0,
        ENUM_MSG_UNRGIST_MEM,
        ENUM_MSG_NORMAL
    }ENUM_MSG_TYPE;
    
    typedef struct tag_msg
    {
        int         length;
        ENUM_MSG_TYPE    type;
        char         data[MAX_MSG_LENGTH];
    } STRUCT_MSG_BUF;
    
    int message_init();
    
    int message_receive(int msgid, STRUCT_MSG_BUF* pmsg, int flag);
    //int message_send(int msgid, const STRUCT_MSG_BUF* pmsg, int flag)
    int message_send(int msgid, const STRUCT_MSG_BUF* pmsg, int flag);
    
    #endif
    #include <stdio.h>
    #include <sys/msg.h>
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <errno.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include "message.h"
    
    int qid=0;
    
    int message_init()
    {
        
        key_t key = ftok(MSG_PATH, MSG_PJID);    
        
        if(key == -1)
        {    
            perror("ftok failed");
            exit(EXIT_FAILURE);
        }        
    
        if((qid = msgget(key, IPC_CREAT | 0666)) == -1)
        {
            perror("create message queue failed");
            exit(EXIT_FAILURE);
        }
    
        return qid;    
        
    }
    
    int message_send(int msgid, const STRUCT_MSG_BUF* pmsg, int flag)
    {
        if( pmsg != NULL && pmsg->length >0 )
        {
            if( msgsnd(msgid, pmsg, sizeof(STRUCT_MSG_BUF), 0) == -1)
            {
                perror("send msg to message queue failed");
                exit(EXIT_FAILURE);
            }
        }
        return 0;    
    }
        
    int message_receive(int msgid, STRUCT_MSG_BUF* pmsg, int flag)
    {
        if( msgrcv(msgid, pmsg, sizeof(STRUCT_MSG_BUF), 0, flag) == -1 )
        {
            perror("receive msg from message queue failed");
            exit(EXIT_FAILURE);
        }
        return 0;
    }
    #include <pthread.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    pthread_t create_thread( void* pFunc)
    {
        
        pthread_t tid;
        if(pthread_create(&tid, NULL, (void*)pFunc, NULL) == 0)
        {
            //fprintf(stdout, "create thread success!
    ");
        }else
        {
            //fprintf(stderr, "create thread failed!
    ");
            exit(EXIT_FAILURE);
        }
        
        return tid;
    }
    #ifndef __THREAD_H
    #define __THREAD_H
    
    #include "pthread.h"
    pthread_t create_thread(void* pFunc);
    
    #endif
    /**@file timer.c
     *  
     *  Timer for game 
     */
    
    #include <unistd.h>
    #include "timer.h"
    
    int interval_time(long useconds)
    {
        if(useconds >= MAX_USECONDS)
            return -1;
    
        return usleep((useconds_t)useconds);
    }
    #ifndef __TIMER_H
    #define __TIMER_H
    
    #define MAX_USECONDS 1000000
    #define INTERVAL     160000
    
    int interval_time(long useconds);
    
    #endif
    #include <stdio.h>
    #include <ncurses.h>
    #include <unistd.h>
    #include "game.h"
    #include "argument.h"
    #include "engine.h"
    #include "daemon.h"
    #include "timer.h"
    #include "message.h"
    
    STRUCT_GAME struct_game;
    
    int main(int argc, char* argv[])
    {
        if(argc >1)
            args_handle(argc, argv);
    
         struct_game.mode=GAME_INIT;
        // init game
        game_init();
    
        while(1==1)
        {
            switch(struct_game.mode)
            {
                case GAME_INIT:
                    game_start();
                    struct_game.mode=GAME_RUN;    
                break;
                case GAME_RUN:
                    game_run();
                    struct_game.mode=GAME_OVER;
                break;
                case GAME_ABORT:
                    game_abort("GAME is ABORTED
    ");
                break;
                case GAME_OVER:
                    game_over();
                break;
                default:
                     fprintf(stdout, "MODE = [%d]
    ", struct_game.mode);    
                break;
            }    
                
        }
        //message_init();    
        return 0;
    }
  • 相关阅读:
    CloudStack 4.2 与CloudStack 4.1二级存储API发生变化
    添加虚拟机磁盘扩容步骤
    NAT概述
    CloudStack全局参数
    在 Web 项目中应用 Apache Shiro
    使用 Spring Security 保护 Web 应用的安全
    获取浏览器的homepage
    剑指offer系列——2.替换空格
    剑指offer系列——1.二维数组中的查找
    JDK下载需要Oracle账号登录问题
  • 原文地址:https://www.cnblogs.com/unixshell/p/3347405.html
Copyright © 2011-2022 走看看