Sandbox: Difference between revisions
Content added Content deleted
No edit summary |
imported>BlueWren |
||
(10 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
=={{header| |
=={{header|Java}}== |
||
{{works with|Jsoftware|>9.0.1}} |
|||
{{libheader|math/calculus}} |
|||
This is a direct translation of [[Tamagotchi emulator#Go|the Go version]]. As such, the output will be similar if not identical. |
|||
In earlier versions D. can be used instead of pderiv |
|||
The code does not use any Java 8+ features so it may function on lower versions. |
|||
<syntaxhighlight lang="J"> |
|||
<syntaxhighlight lang="Java"> |
|||
load 'math/calculus' |
|||
package com.mt; |
|||
coinsert 'jcalculus' |
|||
import java.util.ArrayList; |
|||
NB. In earlier versions D. can be used instead of pderivw |
|||
import java.util.List; |
|||
import java.util.Random; |
|||
import java.util.Scanner; |
|||
class Tamagotchi { |
|||
NB. ========== Precision |
|||
public String name; |
|||
public int age,bored,food,poop; |
|||
} |
|||
public class TamagotchiGame { |
|||
pps =: 9!:11 |
|||
Tamagotchi tama;//current Tamagotchi |
|||
pps 18 |
|||
Random random = new Random(); // pseudo random number generator |
|||
String[] verbs = { |
|||
"Ask", "Ban", "Bash", "Bite", "Break", "Build", |
|||
"Cut", "Dig", "Drag", "Drop", "Drink", "Enjoy", |
|||
"Eat", "End", "Feed", "Fill", "Force", "Grasp", |
|||
"Gas", "Get", "Grab", "Grip", "Hoist", "House", |
|||
"Ice", "Ink", "Join", "Kick", "Leave", "Marry", |
|||
"Mix", "Nab", "Nail", "Open", "Press", "Quash", |
|||
"Rub", "Run", "Save", "Snap", "Taste", "Touch", |
|||
"Use", "Vet", "View", "Wash", "Xerox", "Yield", |
|||
}; |
|||
String[] nouns = { |
|||
"arms", "bugs", "boots", "bowls", "cabins", "cigars", |
|||
"dogs", "eggs", "fakes", "flags", "greens", "guests", |
|||
"hens", "hogs", "items", "jowls", "jewels", "juices", |
|||
"kits", "logs", "lamps", "lions", "levers", "lemons", |
|||
"maps", "mugs", "names", "nests", "nights", "nurses", |
|||
"orbs", "owls", "pages", "posts", "quests", "quotas", |
|||
"rats", "ribs", "roots", "rules", "salads", "sauces", |
|||
"toys", "urns", "vines", "words", "waters", "zebras", |
|||
}; |
|||
String[] boredIc ons = {"💤", "💭", "❓"}; |
|||
String[] foodIcons = {"🍼", "🍔", "🍟", "🍰", "🍜"}; |
|||
String[] poopIcons = {"💩"}; |
|||
String[] sickIcons1 = {"😄", "😃", "😀", "😊", "😎", "👍"};//ok |
|||
String[] sickIcons2 = {"😪", "😥", "😰", "😓"};//ailing |
|||
String[] sickIco ns3 = {"😩", "😫"};//bad |
|||
String[] sickIcons4 = {"😡", "😱"};//very bad |
|||
String[] sickIcons5 = {"❌", "💀", "👽", "😇"};//dead |
|||
String brace(String string) { |
|||
return String.format("{ %s }", string); |
|||
} |
|||
void create(String name) { |
|||
tama = new Tamagotchi(); |
|||
tama.name = name; |
|||
tama.age = 0; |
|||
tama.bored = 0; |
|||
tama.food = 2; |
|||
tama.poop = 0; |
|||
} |
|||
boolean alive() { // alive if sickness <= 10 |
|||
return sickness() <= 10; |
|||
} |
|||
void feed() { |
|||
tama.food++; |
|||
} |
|||
void play() {//may or may not help with boredom |
|||
tama.bored = Math.max(0, tama.bored - random.nextInt(2)); |
|||
} |
|||
void talk() { |
|||
String verb = verbs[random.nextInt(verbs.length)]; |
|||
String noun = nouns[random.nextInt(nouns.length)]; |
|||
System.out.printf("😮 : %s the %s.%n", verb, noun); |
|||
tama.bored = Math.max(0, tama.bored - 1); |
|||
} |
|||
void clean() { |
|||
tama.poop = Math.max(0, tama.poop - 1); |
|||
} |
|||
void idle() {//renamed from wait() due to wait being an existing method from the Object class |
|||
tama.age++; |
|||
tama.bored += random.nextInt(2); |
|||
tama.food = Math.max(0, tama.food - 2); |
|||
tama.poop += random.nextInt(2); |
|||
} |
|||
String status() {// get boredom/food/poop icons |
|||
if(alive()) { |
|||
StringBuilder b = new StringBuilder(), |
|||
f = new StringBuilder(), |
|||
p = new StringBuilder(); |
|||
for(int i = 0; i < tama.bored; i++) { |
|||
b.append(boredIcons[random.nextInt(boredIcons.length)]); |
|||
} |
|||
for(int i = 0; i < tama.food; i++) { |
|||
f.append(foodIcons[random.nextInt(foodIcons.length)]); |
|||
} |
|||
for(int i = 0; i < tama.poop; i++) { |
|||
p.append(poopIcons[random.nextInt(poopIcons.length)]); |
|||
} |
|||
return String.format("%s %s %s", brace(b.toString()), brace(f.toString()), brace(p.toString())); |
|||
} |
|||
return " R.I.P"; |
|||
} |
|||
//too much boredom/food/poop |
|||
int sickness() { |
|||
//dies at age 42 at the latest |
|||
return tama.poop + tama.bored + Math.max(0, tama.age - 32) + Math.abs(tama.food - 2); |
|||
} |
|||
//get health status from sickness level |
|||
void health() { |
|||
int s = sickness(); |
|||
String icon; |
|||
switch(s) { |
|||
case 0: |
|||
case 1: |
|||
case 2: |
|||
icon = sickIcons1[random.nextInt(sickIcons1.length)]; |
|||
break; |
|||
case 3: |
|||
case 4: |
|||
icon = sickIcons2[random.nextInt(sickIcons2.length)]; |
|||
break; |
|||
case 5: |
|||
case 6: |
|||
icon = sickIcons3[random.nextInt(sickIcons3.length)]; |
|||
break; |
|||
case 7: |
|||
case 8: |
|||
case 9: |
|||
case 10: |
|||
icon = sickIcons4[random.nextInt(sickIcons4.length)]; |
|||
break; |
|||
default: |
|||
icon = sickIcons5[random.nextInt(sickIcons5.length)]; |
|||
break; |
|||
} |
|||
System.out.printf("%s (🎂 %d) %s %d %s%n%n", tama.name, tama.age, icon, s, status()); |
|||
} |
|||
void blurb() { |
|||
System.out.println("When the '?' prompt appears, enter an action optionally"); |
|||
System.out.println("followed by the number of repetitions from 1 to 9."); |
|||
System.out.println("If no repetitions are specified, one will be assumed."); |
|||
System.out.println("The available options are: feed, play, talk, clean or wait.\n"); |
|||
} |
|||
public static void main(String[] args) { |
|||
TamagotchiGame game = new TamagotchiGame(); |
|||
game.random.setSeed(System.nanoTime()); |
|||
System.out.println(" TAMAGOTCHI EMULATOR"); |
|||
System.out.println(" ===================\n"); |
|||
Scanner scanner = new Scanner(System.in); |
|||
System.out.print("Enter the name of your tamagotchi : "); |
|||
String name = scanner.nextLine().toLowerCase().trim(); |
|||
game.create(name); |
|||
System.out.printf("%n%s (age) health {bored} {food} {poop}%n%n", "name"); |
|||
game.health(); |
|||
game.blurb(); |
|||
ArrayList<String> commands = new ArrayList<>(List.of("feed", "play", "talk", "clean", "wait")); |
|||
int count = 0; |
|||
while(game.alive()) { |
|||
System.out.print("? "); |
|||
String input = scanner.nextLine().toLowerCase().trim(); |
|||
String[] items = input.split(" "); |
|||
if(items.length > 2) continue; |
|||
String action = items[0]; |
|||
if(!commands.contains(action)) { |
|||
continue; |
|||
} |
|||
int reps = 1; |
|||
if(items.length == 2) { |
|||
reps = Integer.parseInt(items[1]); |
|||
} else { |
|||
reps = 1; |
|||
} |
|||
for(int i = 0; i < reps; i++) { |
|||
switch(action) { |
|||
case "feed": |
|||
game.feed(); |
|||
break; |
|||
case "play": |
|||
game.play(); |
|||
break; |
|||
case "talk": |
|||
game.talk(); |
|||
break; |
|||
case "wait": |
|||
game.idle(); |
|||
break; |
|||
} |
|||
//simulate a wait on every third (non-wait) action |
|||
if(!action.equals("wait")) { |
|||
count++; |
|||
if(count%3==0) { |
|||
game.idle(); |
|||
} |
|||
} |
|||
} |
|||
game.health(); |
|||
} |
|||
scanner.close(); |
|||
} |
|||
} |
|||
NB. ========== Function definition |
|||
</syntaxhighlight> |
|||
func=: monad define |
|||
{{out}} |
|||
'xp yp' =: y |
|||
<pre> |
|||
((1-xp)*(1-xp) * ] ^-(yp)^2) + yp*(yp+2)* ] ^ _2 * xp^2 |
|||
TAMAGOTCHI EMULATOR |
|||
) |
|||
=================== |
|||
Enter the name of your tamagotchi : jeremy |
|||
NB. ========== Gradient descent |
|||
name (age) health {bored} {food} {poop} |
|||
gd =: monad define |
|||
learn=: 0.03 |
|||
gold=: 1 1 |
|||
precision=: 1e_10 |
|||
flagg=:0 |
|||
attempts =: 1000 |
|||
jeremy (🎂 0) 😀 0 { } { 🍜🍜 } { } |
|||
i=:0 |
|||
go=: 0.1 _1 |
|||
When the '?' prompt appears, enter an action optionally |
|||
while. (i < attempts) & !(flagg=0) do. |
|||
followed by the number of repetitions from 1 to 9. |
|||
go=: go-learn * func pderiv 1 ] go |
|||
If no repetitions are specified, one will be assumed. |
|||
i=: >: i |
|||
The available options are: feed, play, talk, clean or wait. |
|||
if. (precision > | (func go) - (func gold)) do. |
|||
flagg=:1 |
|||
end. |
|||
gold=: go |
|||
smoutput i,go |
|||
end. |
|||
smoutput 'x';({.go);'y';({:go);'f(x,y)';func go |
|||
) |
|||
? feed 4 |
|||
jeremy (🎂 1) 😥 3 { } { 🍟🍜🍟🍜 } { 💩 } |
|||
? wait 4 |
|||
jeremy (🎂 5) 😫 5 { 💭💤 } { } { 💩 } |
|||
? clean 2 |
|||
jeremy (🎂 6) 😫 6 { 💭💭💭 } { } { 💩 } |
|||
? talk 4 |
|||
😮 : Grasp the names. |
|||
😮 : Vet the greens. |
|||
😮 : Grasp the urns. |
|||
😮 : Dig the zebras. |
|||
jeremy (🎂 7) 😰 3 { } { } { 💩 } |
|||
? feed 6 |
|||
jeremy (🎂 9) 😊 2 { } { 🍼🍟 } { 💩💩 } |
|||
? play 2 |
|||
jeremy (🎂 10) 😩 5 { } { } { 💩💩💩 } |
|||
? talk |
|||
😮 : Touch the eggs. |
|||
jeremy (🎂 10) 😫 5 { } { } { 💩💩💩 } |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
NB. 1 0.181030990251029783 _1.17878944691407384 |
|||
NB. 2 0.106526139628704192 _1.19653062777180708 |
|||
NB. 3 0.114463555353394503 _1.21817798934176125 |
|||
NB. 4 0.107500175480679167 _1.22061411764084937 |
|||
NB. 5 0.108281552776878703 _1.22275948119432343 |
|||
NB. 6 0.107616591357617614 _1.22300417912290982 |
|||
NB. 7 0.107689377135022829 _1.2232109060917864 |
|||
NB. 8 0.107626033138308236 _1.22323510540100955 |
|||
NB. 9 0.107632763421305816 _1.2232549721759014 |
|||
NB. 10 0.107626730913479213 _1.22325735959949355 |
|||
NB. |
|||
NB. ┌─┬────────────────────┬─┬────────────────────┬──────┬─────────────────────┐ |
|||
NB. │x│0.107626730913479213│y│_1.22325735959949355│f(x,y)│_0.750063420544188286│ |
|||
NB. └─┴────────────────────┴─┴────────────────────┴──────┴─────────────────────┘ |
|||
</pre> |
</pre> |
Revision as of 07:33, 24 September 2023
Java
This is a direct translation of the Go version. As such, the output will be similar if not identical.
The code does not use any Java 8+ features so it may function on lower versions.
package com.mt;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
class Tamagotchi {
public String name;
public int age,bored,food,poop;
}
public class TamagotchiGame {
Tamagotchi tama;//current Tamagotchi
Random random = new Random(); // pseudo random number generator
String[] verbs = {
"Ask", "Ban", "Bash", "Bite", "Break", "Build",
"Cut", "Dig", "Drag", "Drop", "Drink", "Enjoy",
"Eat", "End", "Feed", "Fill", "Force", "Grasp",
"Gas", "Get", "Grab", "Grip", "Hoist", "House",
"Ice", "Ink", "Join", "Kick", "Leave", "Marry",
"Mix", "Nab", "Nail", "Open", "Press", "Quash",
"Rub", "Run", "Save", "Snap", "Taste", "Touch",
"Use", "Vet", "View", "Wash", "Xerox", "Yield",
};
String[] nouns = {
"arms", "bugs", "boots", "bowls", "cabins", "cigars",
"dogs", "eggs", "fakes", "flags", "greens", "guests",
"hens", "hogs", "items", "jowls", "jewels", "juices",
"kits", "logs", "lamps", "lions", "levers", "lemons",
"maps", "mugs", "names", "nests", "nights", "nurses",
"orbs", "owls", "pages", "posts", "quests", "quotas",
"rats", "ribs", "roots", "rules", "salads", "sauces",
"toys", "urns", "vines", "words", "waters", "zebras",
};
String[] boredIc ons = {"💤", "💭", "❓"};
String[] foodIcons = {"🍼", "🍔", "🍟", "🍰", "🍜"};
String[] poopIcons = {"💩"};
String[] sickIcons1 = {"😄", "😃", "😀", "😊", "😎", "👍"};//ok
String[] sickIcons2 = {"😪", "😥", "😰", "😓"};//ailing
String[] sickIco ns3 = {"😩", "😫"};//bad
String[] sickIcons4 = {"😡", "😱"};//very bad
String[] sickIcons5 = {"❌", "💀", "👽", "😇"};//dead
String brace(String string) {
return String.format("{ %s }", string);
}
void create(String name) {
tama = new Tamagotchi();
tama.name = name;
tama.age = 0;
tama.bored = 0;
tama.food = 2;
tama.poop = 0;
}
boolean alive() { // alive if sickness <= 10
return sickness() <= 10;
}
void feed() {
tama.food++;
}
void play() {//may or may not help with boredom
tama.bored = Math.max(0, tama.bored - random.nextInt(2));
}
void talk() {
String verb = verbs[random.nextInt(verbs.length)];
String noun = nouns[random.nextInt(nouns.length)];
System.out.printf("😮 : %s the %s.%n", verb, noun);
tama.bored = Math.max(0, tama.bored - 1);
}
void clean() {
tama.poop = Math.max(0, tama.poop - 1);
}
void idle() {//renamed from wait() due to wait being an existing method from the Object class
tama.age++;
tama.bored += random.nextInt(2);
tama.food = Math.max(0, tama.food - 2);
tama.poop += random.nextInt(2);
}
String status() {// get boredom/food/poop icons
if(alive()) {
StringBuilder b = new StringBuilder(),
f = new StringBuilder(),
p = new StringBuilder();
for(int i = 0; i < tama.bored; i++) {
b.append(boredIcons[random.nextInt(boredIcons.length)]);
}
for(int i = 0; i < tama.food; i++) {
f.append(foodIcons[random.nextInt(foodIcons.length)]);
}
for(int i = 0; i < tama.poop; i++) {
p.append(poopIcons[random.nextInt(poopIcons.length)]);
}
return String.format("%s %s %s", brace(b.toString()), brace(f.toString()), brace(p.toString()));
}
return " R.I.P";
}
//too much boredom/food/poop
int sickness() {
//dies at age 42 at the latest
return tama.poop + tama.bored + Math.max(0, tama.age - 32) + Math.abs(tama.food - 2);
}
//get health status from sickness level
void health() {
int s = sickness();
String icon;
switch(s) {
case 0:
case 1:
case 2:
icon = sickIcons1[random.nextInt(sickIcons1.length)];
break;
case 3:
case 4:
icon = sickIcons2[random.nextInt(sickIcons2.length)];
break;
case 5:
case 6:
icon = sickIcons3[random.nextInt(sickIcons3.length)];
break;
case 7:
case 8:
case 9:
case 10:
icon = sickIcons4[random.nextInt(sickIcons4.length)];
break;
default:
icon = sickIcons5[random.nextInt(sickIcons5.length)];
break;
}
System.out.printf("%s (🎂 %d) %s %d %s%n%n", tama.name, tama.age, icon, s, status());
}
void blurb() {
System.out.println("When the '?' prompt appears, enter an action optionally");
System.out.println("followed by the number of repetitions from 1 to 9.");
System.out.println("If no repetitions are specified, one will be assumed.");
System.out.println("The available options are: feed, play, talk, clean or wait.\n");
}
public static void main(String[] args) {
TamagotchiGame game = new TamagotchiGame();
game.random.setSeed(System.nanoTime());
System.out.println(" TAMAGOTCHI EMULATOR");
System.out.println(" ===================\n");
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the name of your tamagotchi : ");
String name = scanner.nextLine().toLowerCase().trim();
game.create(name);
System.out.printf("%n%s (age) health {bored} {food} {poop}%n%n", "name");
game.health();
game.blurb();
ArrayList<String> commands = new ArrayList<>(List.of("feed", "play", "talk", "clean", "wait"));
int count = 0;
while(game.alive()) {
System.out.print("? ");
String input = scanner.nextLine().toLowerCase().trim();
String[] items = input.split(" ");
if(items.length > 2) continue;
String action = items[0];
if(!commands.contains(action)) {
continue;
}
int reps = 1;
if(items.length == 2) {
reps = Integer.parseInt(items[1]);
} else {
reps = 1;
}
for(int i = 0; i < reps; i++) {
switch(action) {
case "feed":
game.feed();
break;
case "play":
game.play();
break;
case "talk":
game.talk();
break;
case "wait":
game.idle();
break;
}
//simulate a wait on every third (non-wait) action
if(!action.equals("wait")) {
count++;
if(count%3==0) {
game.idle();
}
}
}
game.health();
}
scanner.close();
}
}
- Output:
TAMAGOTCHI EMULATOR =================== Enter the name of your tamagotchi : jeremy name (age) health {bored} {food} {poop} jeremy (🎂 0) 😀 0 { } { 🍜🍜 } { } When the '?' prompt appears, enter an action optionally followed by the number of repetitions from 1 to 9. If no repetitions are specified, one will be assumed. The available options are: feed, play, talk, clean or wait. ? feed 4 jeremy (🎂 1) 😥 3 { } { 🍟🍜🍟🍜 } { 💩 } ? wait 4 jeremy (🎂 5) 😫 5 { 💭💤 } { } { 💩 } ? clean 2 jeremy (🎂 6) 😫 6 { 💭💭💭 } { } { 💩 } ? talk 4 😮 : Grasp the names. 😮 : Vet the greens. 😮 : Grasp the urns. 😮 : Dig the zebras. jeremy (🎂 7) 😰 3 { } { } { 💩 } ? feed 6 jeremy (🎂 9) 😊 2 { } { 🍼🍟 } { 💩💩 } ? play 2 jeremy (🎂 10) 😩 5 { } { } { 💩💩💩 } ? talk 😮 : Touch the eggs. jeremy (🎂 10) 😫 5 { } { } { 💩💩💩 }