Arqade is a question and answer site for passionate videogamers on all platforms. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've just bought a gaming mouse, and had to disable the acceleration (windows settings) for decent movement.

My question is, are there any tools available where I can find optimal settings (dpi)?

I thought about something where I would have to move to targets like little boxes, circles or something like that.

share|improve this question
up vote 3 down vote accepted

Since Team Fortress 2 is free to play, and it comes with a training mode (including bots!), it might work for your situation. You'd not only be testing your DPI settings, but you'd be practicing in a real game situation.

I also found this app, which is more along the lines of a 'move the mouse around to hit little circles' kind of deal. The app is a bit annoying though, with some loud background music. It still might be quicker than loading up TF2, or there's some other reason why it's not optimal for your testing needs.

share|improve this answer
Apologies for the previous revision of this, which contained the wrong link. Fixed it! – agent86 Nov 25 '11 at 0:15

enter image description here

I did a quick hack to get something close to what I really want and share it. It is a small java program, time required to reach the target is displayed right (yellow bars) targets are red. To leave scroll the mouse wheel. I hope my answer isn't off-topic.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MTrainer extends JFrame {

    Random rand = new Random();

    int currPos, width, height, count;

    int BLOCK_SIZE = 8;

    Color[] blocks;

    MTrainer mt;

    ArrayList<Integer> times = new ArrayList<Integer>();

    long start;

    public MTrainer() throws HeadlessException {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        width = screenSize.width / BLOCK_SIZE;
        height = screenSize.height / BLOCK_SIZE;
        count = width * height;
        blocks = new Color[count];
        Arrays.fill(blocks, Color.BLACK);
        setBounds(0, 0, screenSize.width, screenSize.height);
        MPanel mPanel = new MPanel();



    class MPanel extends JPanel implements MouseMotionListener, MouseWheelListener {
        public void paintComponent(Graphics g) {
            for (int pos = 0; pos < count; pos++) {
                int x = (pos) % width;
                int y = (pos) / width;
                g.fill3DRect(x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE,
                        BLOCK_SIZE, true);
            int line = 0;

            for (int w : times) {
                g.drawLine(width * BLOCK_SIZE - Math.min(1000, w / 10), line,
                        width * BLOCK_SIZE - 1, line);

        public void mouseDragged(MouseEvent e) {

        public void mouseMoved(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            int idx = x / BLOCK_SIZE + (y / BLOCK_SIZE) * width;

            if (idx == currPos) {
                int diff = (int) (System.currentTimeMillis() - start);
                if (times.size() == height) {

                blocks[currPos] = Color.BLUE;
                do {
                    currPos = rand.nextInt();
                } while (currPos > count || currPos < 0
                        || blocks[currPos] == Color.BLUE);
                start = System.currentTimeMillis();
                blocks[currPos] = Color.RED;

        public void mouseWheelMoved(MouseWheelEvent arg0) {
            if (arg0.getButton() != MouseEvent.BUTTON1) {

    public static void main(String[] args) {

        MTrainer mt = new MTrainer();
        mt.currPos = mt.rand.nextInt(37);
        mt.blocks[mt.currPos] = Color.RED;
        mt.start = System.currentTimeMillis();
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.