errorsandexceptions

Code, etc.

Tag Archives: Programming

Conway’s Game of Life in Java

This morning I was looking at Wikipedia pages about cellular automata and I got an urge to implement Conway’s Game of Life as a Java exercise. This is what I came up with. It generates a random matrix for the starting position that then iteratively evolves in accordance with the Rules of the Game.

package Conway;

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.util.Timer;

public class GameOfLife extends Canvas {
	
	private static final long serialVersionUID = 1L;
	
	int[][] arena = new int[200][200];
	int[][] newArena = new int[200][200];
	
	public GameOfLife() {
		Random rand = new Random();
		for (int i=0; i<200; i++) {
			for (int j=0; j<200; j++) {
				arena[i][j] = rand.nextInt(2);
			}
		}
	}
	
	public void paint(Graphics graphics) {
		for (int i=0; i<200; i++) {
			for (int j=0; j<200; j++) {
				if (arena[i][j] == 1) {
					int vPos = i * 4;
					int hPos = j * 4;
					
					graphics.fillRect(hPos, vPos, 4, 4);
				}
			}
		}
	}
	
	public void LifeLoop() {
		Timer timer = new Timer();
		timer.scheduleAtFixedRate(new NextIter(),2000, 500);
	}
	
	class NextIter extends TimerTask {
		public void run() {
			int square1;
			int square2;
			int square3;
			int square4;
			int square5;
			int square6;
			int square7;
			int square8;
			int neighbours;
			
			for (int i=0; i<200; i++) {
				for (int j=0; j<200; j++) {
					
					//Get the eight adjacent squares
					try {
						square1 = arena[i-1][j-1];
					}
					catch (ArrayIndexOutOfBoundsException e) {
						square1 = 0;
					}
					
					try {
						square2 = arena[i-1][j];
					}
					catch (ArrayIndexOutOfBoundsException e) {
						square2 = 0;
					}
					
					try {
						square3 = arena[i-1][j+1];
					}
					catch (ArrayIndexOutOfBoundsException e) {
						square3 = 0;
					}
					
					try {
						square4 = arena[i][j+1];
					}
					catch (ArrayIndexOutOfBoundsException e) {
						square4 = 0;
					}
					
					try {
						square5 = arena[i+1][j+1];
					}
					catch (ArrayIndexOutOfBoundsException e) {
						square5 = 0;
					}
					
					try {
						square6 = arena[i+1][j];
					}
					catch (ArrayIndexOutOfBoundsException e) {
						square6 = 0;
					}
					
					try {
						square7 = arena[i+1][j-1];
					}
					catch (ArrayIndexOutOfBoundsException e) {
						square7 = 0;
					}
					
					try {
						square8 = arena[i][j-1];
					}
					catch (ArrayIndexOutOfBoundsException e) {
						square8 = 0;
					}
					
					neighbours = square1 + square2 + square3 + 
						square4 + square5 + square6 + square7 + square8;
					
					if (arena[i][j] == 1 & (neighbours == 2 | neighbours == 3)) {
						newArena[i][j] = 1;
					}
					
					else if (arena[i][j] == 0 & neighbours == 3) {
						newArena[i][j] = 1;
					}
					
					else {
						newArena[i][j] = 0;
					}
				}
			}
			
			for (int i=0; i<200; i++) {
				for (int j=0; j<200; j++) {
					arena[i][j] = newArena[i][j];
				}
			}
			
			repaint();
		}
	}
	
	public static void main(String[] args) {
		GameOfLife canvas = new GameOfLife();
		JFrame frame = new JFrame();
		frame.setTitle("Conway's Bestiary");
		frame.setSize(816, 838);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().add(canvas);
		frame.setVisible(true);
		
		canvas.LifeLoop();
	}
}
Advertisements

Using OAuth with Python Twitter Tools

I have been writing a Twitter client in Python based on Mike Verdone’s Python Twitter Tools. It’s an elegant and concise library that allows access to all the useful parts of the Twitter API from inside a Python application. Unfortunately, the documentation is bad to non-existent.

After much fiddling I figured out how to use it for OAuth authentication. I’m sharing it here to save the next person the trouble. The first step if of course to import the twitter module. I like to import the oauth_dance portion of it too. This is needed to get the token key and token secret that give the application access to your Twitter account.

import twitter

import twitter.oauth_dance

You will need the consumer key and consumer secret, which you can get by registering your application with Twitter. Once you have done that just stick them in variables. As we don’t yet have the token key or secret, we pass empty strings for them. We then use parse_oauth_tokens in oauth_dance to get the token key and token secret and assign them to variables.

app_name = "appnamehere"

key = "blahblahblahblah"

secret = "putrealdatahere"

twitterConnect = twitter.Twitter(auth=twitter.oauth.OAuth('', '', key, secret), format='')

oauth_token, oauth_token_secret = twitter.oauth_dance.parse_oauth_tokens(twitterConnect.oauth.request_token())

Now we open a web browser and point it at an URL based on the value in oauth_token. The user is asked to enter their login details and confirm that they want to allow the application to access their Twitter account. Then the user is given a PIN that we use in the next stage to complete the OAuth process.

import webbrowser

oauth_url = ('http://api.twitter.com/oauth/authorize?oauth_token=' + oauth_token)

webbrowser.open(self.oauth_url)

Because my application is based on Python and Qt, I get the PIN from a text field in a dialog box. It is an instance of Qt’s QLineEdit. It doesn’t matter how you do it as long as you get the PIN into a string that can be passed to the twitterConnect object.

oauth_verifier = lineEdit.text()

twitterConnect = twitter.Twitter(auth=twitter.oauth.OAuth(oauth_token, oauth_token_secret, key, secret), format='')

oauth_token, oauth_token_secret = twitter.oauth_dance.parse_oauth_tokens(twitterConnect.oauth.access_token(oauth_verifier=oauth_verifier))

That completes the process. Now you can write the OAuth token key and token secret to a configuration file and use them for authentication in the future.