나 만 의 체감 게임 을 하 다
시스템 구 조 는 다음 과 같다.
모 바 일 센서 정보 수집 - 알고리즘 을 이용 하여 패턴 인식 - 와 이 파이 나 블 루 투 스 를 이용 하여 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 엔 드 프로그램 이 실행 하 는 효과 도 를 놓 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDOJ/HDU 1113 Word Amalgamation (사전 순서 ~ 지도)a dictionary, which consists of at least one and at most 100 words, one per line; a line containing XXXXXX, which signal...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.