我用一些小游戏编程;挑战是在文本框中键入孔abc并给出使用的时间。
现在我已经内置了一些防止作弊的功能:
像复制粘贴孔abc一样 或者只有abc的中间像bcdefgh ......如果你研究我的代码,你会看到我只检查第一个字母A,L和Z. A保存开始时间 L防止作弊和复制粘贴只有中间的abc Z检查我放入TextField的孔串。并停止时间。
继承守则:
package lvl1;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class test implements KeyListener {
private Date start_time;
private JTextField jtf;
private JLabel lblStatus;
private boolean lpressed;
public static void main(String[] args) {
new test();
}
public test() {
jtf = new JTextField();
JFrame myframe = new JFrame();
jtf.addKeyListener(this);
lblStatus = new JLabel("Zeit:");
myframe.setSize(700, 60);
myframe.setTitle("ABC COOLGAME");
myframe.setLocationRelativeTo(null);
myframe.setDefaultCloseOperation(myframe.EXIT_ON_CLOSE);
myframe.setLayout(new GridLayout(1, 2));
myframe.add(jtf);
myframe.add(lblStatus);
myframe.setVisible(true);
}
@Override
public void keyPressed(KeyEvent arg0) {
if (65 == arg0.getKeyCode()) {
start_time = new Date();
}
if (8 == arg0.getKeyCode()) {
jtf.setText("");
jtf.setBackground(Color.WHITE);
}
if (76 == arg0.getKeyCode()) {
lpressed = true;
}
}
@Override
public void keyReleased(KeyEvent arg0) {
Date date = new Date();
if ((90 == arg0.getKeyCode()) & (jtf.getText().equals("abcdefghijklmnopqrstuvwxyz") & (lpressed == true))) {
lblStatus.setText("Zeit: " + (date.getTime() - start_time.getTime())
+ " Milliseconds");
jtf.setBackground(Color.GREEN);
lpressed = false;
}
}
@Override
public void keyTyped(KeyEvent e) {/* Nothing to do */}
}
现在我将Jar文件发送给我的朋友,并且在几分钟内我发现了一条记录为10毫秒的消息。他告诉我,他用vba发送了abc over
Sleep 5000 'Here he click the cursor in my textfield
SendKeys "abcdefghijklmnopqrstuvwxyz"
此语句将自动发送所有键,与我在键盘上键入的内容相比较。
有人知道一种防止作弊技术的方法吗?
游戏对其他东西的作弊引擎并不安全,但为了防止上面的技术将是惊人的。