나 만 의 체감 게임 을 하 다

체감 게임 이라는 개념 은 모두 가 낯 설 지 않 을 것 이다. 그러나 스스로 개체 감 게임 을 만 드 는 것 은 어 려 운 것 같다. 주로 인체 동작의 획득 이 비교적 골 치 아프다.하지만 스마트 폰 의 등장 으로 이 일 은 훨씬 쉬 워 졌 다.현재 우리 가 사용 하 는 휴대 전화 에는 세 축 가속도 계 와 같은 많은 센서 가 있 는데, 이 센서 들 을 이용 하면 체감 게임 의 작성 을 실현 할 수 있다.
시스템 구 조 는 다음 과 같다.
모 바 일 센서 정보 수집 - 알고리즘 을 이용 하여 패턴 인식 - 와 이 파이 나 블 루 투 스 를 이용 하여 PC 에 전송 - PC 게임 프로그램의 조작 실현
복잡 해 보이 지 않 는 다 고요?나 는 3 시간 도 안 되 어 데모 하 나 를 만 들 었 다.센서 는 안 드 로 이 드 폰 의 세 축 가속도 계 를 사용 하고 통신 은 socket 을 사용 하 며 PC 의 게임 프로그램 은 Qt 로 만 든 탐식 뱀 으로 핸드폰 을 들 고 손 운동 을 통 해 탐식 뱀 을 조종 하 는 기능 을 실현 한다.잡담 은 많 지 않 습 니 다. 다음은 핵심 코드 를 보 여 드 리 겠 습 니 다.
우선 안 드 로 이 드 코드 입 니 다. 주로 센서 데이터 수집, socket 통신 (네트워크 권한 추가 잊 지 마 세 요) 입 니 다.사용 하 는 패턴 인식 은 매우 간단 하고 특정한 방향 에서 가속도 의 크기 를 직접 판단 하여 방향 을 판별 한다.
MainActivity.java
package com.example.test;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.List;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
	private SensorManager sm;
	private mylistener ml;
	private Socket so;
    protected void onCreate(Bundle savedInstanceState) {
    	sm = (SensorManager)getSystemService(SENSOR_SERVICE);
    	List<Sensor> kkk = sm.getSensorList(Sensor.TYPE_ALL);
    	ml = new mylistener();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView c = (TextView)(findViewById(R.id.view));
		String s = "";
        for (int i = 0;i < kkk.size();++i)
        	s += kkk.get(i).getName() + '
'; c.setText(s); new Thread() { public void run(){ try { so = new Socket("192.168.1.104", 12345); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } @Override protected void onResume() { Sensor sensor_orientation=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sm.registerListener(ml,sensor_orientation, SensorManager.SENSOR_DELAY_GAME); super.onResume(); } @Override protected void onPause() { sm.unregisterListener(ml); super.onPause(); } private final class mylistener implements SensorEventListener { @Override public void onSensorChanged(SensorEvent event) { TextView cc = (TextView)(findViewById(R.id.view2)); // TODO Auto-generated method stub if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; cc.setText("x: "+x+"
y: "+y+"
z: "+z); if (x < -5) { try { so.getOutputStream().write('1'); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (x > 5) { try { so.getOutputStream().write('0'); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (z < -5) { try { so.getOutputStream().write('2');// } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (z > 5) { try { so.getOutputStream().write('3'); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } } }

다음은 PC 에서 Qt 로 쓴 코드 입 니 다. 아주 간단 한 탐식 뱀 입 니 다. 상하 좌우 키 로 조작 할 수 있 습 니 다. s 를 누 르 면 다시 시작 할 수 있 습 니 다. 핸드폰 으로 조작 하기 위해 socket 통신 도 추가 해 야 합 니 다.
우선 헤더 파일:
server.h
4. 567913. 다음은 메 인 프로그램 입 니 다.
main.cpp
#ifndef SERVER_H
#define SERVER_H

#endif // SERVER_H

#include <QObject>
#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>

class MyPainter:public QWidget
{
    Q_OBJECT
    int **board;
    int **from_x;
    int **from_y;
    int b_w;
    int b_l;
    int size;
    int head_x;
    int head_y;
    int tail_x;
    int tail_y;
    int len;
    QTimer *timer;
    int status;
public:
    int dir;
    int temp_dir;
    MyPainter();
    ~MyPainter();
    void InitGame();
    void paintEvent(QPaintEvent *e);
    void keyPressEvent(QKeyEvent *e);
    void RandomFood();
public slots:
    void SnakeMove();
};


class Server: public QObject
{
    Q_OBJECT
private:
    QTcpServer *server;
    QTcpSocket *socket;
    MyPainter *mp;
public:
    Server();
    ~Server();
public slots:
    void getSocket();
    void print();
};

전체 코드 가 필요 하 시 면 댓 글로 남 겨 주세요.또한 그림 을 넣 지 않 으 면 성의 가 없 는 것 같 습 니 다. 다음은 PC 엔 드 프로그램 이 실행 하 는 효과 도 를 놓 겠 습 니 다.

좋은 웹페이지 즐겨찾기