Skip to content

Instantly share code, notes, and snippets.

@rahcola
Forked from anonymous/laskin_code.js
Created November 10, 2012 18:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rahcola/4052124 to your computer and use it in GitHub Desktop.
Save rahcola/4052124 to your computer and use it in GitHub Desktop.
Selainohjelmointi, viikko 2
function init() {
naytaLuku("0");
/*eka näytä nolla */
var nappula = document.getElementById("nappi");
var laskin = new Laskin();
/* on nyt tosi rumasti tehty, mutta en keksinyt parempaakaan
* eli siis en päässyt tuolta hanskaaHomma-funktiosta
* käsiksi laskimeen, yritin vaikka mitä esim. antaa sen olion
* tolle hanskaaHommalle parametrina, mutta ei jostain
* syystä toiminut. Terkuin 4 tuntia myöhemmin päätin muuttaa
* ton oliomäärittelyn globaaliksi */
nappula.addEventListener('click',
function() {
laskin.kasvata();
naytaLuku(laskin.annaLuku());
},
false);
}
function naytaLuku(numero) {
var span = document.getElementById("laskuri");
span.innerHTML = "";
console.log("naytaLuku luku ="+numero);
span.innerHTML = numero;
}
function Laskin() {
this.luku = 0;
console.log("luodessa laskin luku ="+this.luku);
}
Laskin.prototype.kasvata = function() {
console.log("kasvata-funktiossa luku ennen kasvatusta="+this.luku);
this.luku++;
console.log("kasvata-funktiossa luku ="+this.luku);
naytaLuku(this.annaLuku);
}
Laskin.prototype.annaLuku = function() {
console.log("annaLuku-funktiossa luku ="+this.luku);
return this.luku;
}
/* Toteuta apuvälineeksi olion luova funktio Laskin
jolla on muuttuja luku. Lisää funktiolle Laskin
funktiot kasvata, joka kasvattaa olion luvun arvoa yhdellä, ja
annaLuku, joka palauttaa olion luvun arvon. */
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Laskuri</title>
</head>
<body onload="init();">
<header>
<h1>Laskuri</h1>
</header>
<section>
<h2>Nappia painettu <span id="laskuri"></span> kertaa.</h2>
<input type="button" id="nappi" value="Paina!" />
</section>
<script src="laskin_code.js"></script>
</body>
</html>
/*Jokaisella tavaralla on nimi ja paino.
Matkalaukkuun lisätään tavaroita,
ja matkalaukulla on maksimipaino.
Ruumaan taas lisätään matkalaukkuja,
ja myös ruumalla on maksimipaino.
Matkalaukkuun voi lisätä vain tavaroita,
ja ruumaan vain matkalaukkuja.
Jos matkalaukun ja uuden tavaran yhteispaino
on suurempi kuin matkalaukun maksimipaino,
ei tavaraa voida lisätä. Vastaavasti ruumalle.
Toteuta olioita luovat funktiot Tavara,
Matkalaukku, ja Ruuma lähdekooditiedostoon code.js. */
function Tavara(nimi, paino) {
this.nimi = nimi;
this.paino = paino;
}
function Matkalaukku(maksimipaino) {
this.maxpaino = maksimipaino;
/* tarkista että vain tavaroita, tarkista maksimipaino */
this.tavarat = new Array();
}
Matkalaukku.prototype.laskePaino = function(){
this.yhteispaino = 0;
for (var i=0; i<this.tavarat.length; i++) {
this.yhteispaino += this.tavarat[i].paino;
}
}
Matkalaukku.prototype.paino = function(){
this.laskePaino();
return this.yhteispaino;
}
Matkalaukku.prototype.lisaa = function(romu) {
/* ny pitää tarkistaa et on tavara */
if (romu instanceof Tavara) {
if (romu.paino + this.paino() <= this.maxpaino) {
for (var i=0; i<this.tavarat.length; i++) {
if (this.tavarat[i] === romu) {
console.log("Tavara lisätty jo, ei onnistu!");
return;
}
}
this.tavarat.push(romu);
} else {
console.log("Ei ollut tilaa");
}
}
}
function Ruuma(maksimipaino) {
this.maxpaino = maksimipaino;
/* tarkista että vain matkalaukkuja, tarkista maksimipaino */
this.laukut = new Array();
}
Ruuma.prototype.laskePaino = function(){
this.yhteispaino = 0;
/* if (this.laukut.length == 0) {
return 0;
} */
if (this.laukut[0] == null) {
return;
}
for (var i=0; i<this.laukut.length; i++) {
var uusi_paino = this.laukut[i].paino();
this.yhteispaino += uusi_paino;
/* this.yhteispaino += this.laukut[i].paino();
console.log("laukun paino on "+this.laukut[i].paino());
this laukut i is undefined */
console.log("ja paino on"+this.yhteispaino)
}
}
Ruuma.prototype.paino = function(){
this.laskePaino();
return this.yhteispaino;
}
Ruuma.prototype.lisaa = function(kassi) {
/* ny pitää tarkistaa et on laukku */
if (kassi instanceof Matkalaukku) {
/* kassi.laskePaino(); */
console.log(kassi.paino()+" on kassin paino ja this.paino on "+this.paino()+" ja laukun maxpaino on "+this.maxpaino);
if (kassi.paino() + this.paino() <= this.maxpaino) {
for (var i=0; i<this.laukut.length; i++) {
if (this.laukut[i] === kassi) {
console.log("Laukku lisätty jo, ei onnistu!");
return;
}
}
this.laukut.push(kassi);
} else {
console.log("Ei ollut tilaa");
}
}
}
// testikoodi:
var kivi = new Tavara("kivi", 3);
var kirja = new Tavara("kirja", 7);
var pumpuli = new Tavara("pumpuli", 1);
var laukku = new Matkalaukku(10);
var vuitton = new Matkalaukku(3);
var schenker = new Ruuma(15);
laukku.lisaa(kivi);
alert("laukun paino, pitäisi olla 3: " + laukku.paino());
laukku.lisaa(kivi); // virhe: "Tavara lisätty jo, ei onnistu!"
laukku.lisaa(kirja);
alert("laukun paino, pitäisi olla 10: " + laukku.paino());
laukku.lisaa(pumpuli); // virhe: "Liian painava, ei pysty!"
alert("laukun paino, pitäisi olla 10: " + laukku.paino());
schenker.lisaa(laukku);
schenker.lisaa(pumpuli); // virhe: Vääränlainen esine, ei onnistu!
alert("Ruuman paino, pitäisi olla 10: " + schenker.paino());
vuitton.lisaa(pumpuli);
alert("Vuitton + pumpuli ="+vuitton.paino());
schenker.lisaa(vuitton);
alert("Ruuman paino, pitäisi olla noin 10.001: " + schenker.paino());
pumpuli.paino = 300;
alert("Pumpulin uusi paino on!" +pumpuli.paino);
alert("Ruuman paino, pitäisi olla 310: " + schenker.paino()); // hups!
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Tavara, Matkalaukku ja Ruuma</title>
</head>
<body>
<script src="ruuma_code.js"></script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment